《深入理解Java虚拟机》读书笔记——第1章 走近Java

时间:2023-01-01 22:29:22

(注:原文请见《深入理解Java虚拟机》周志明 著,知识点部分参考百度百科)

总述

第1章分为两个部分:Java概述及自己动手编译JDK的教程。

1 Java概述

介绍了Java的整体特性、Java的技术体系组成、Java及JVM的发展史。

1.1 Java的总体特性

1)Java不仅仅是一门编程语言,更是由一系列计算机软件和规范组成的技术体系。

2)Java具有众多优点:

a.Java虚拟机在千差万别的物理机上建立了统一的运行平台,实现了跨平台性。(主要)

b.提供了相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题。

c.实现了热点代码检测和运行时编译及优化,使得Java应用能随着运行时间的增加而获得更高的性能。

d.完善的应用程序接口及大量第三方类库的支持

3)Java目前短板:(截至JDK1.7)

a.Java尚不支持模块化,主要由于Sun公司提出的JSR没有获得通过,但是在Sun公司在OpenJDK中建立了一个名为Jigsaw的项目用来推动Sun提出的JSR标准在Java平台中转为具体实现。此外,IBM提出了自己的Java平台模块化标准JSR-291:Java SE动态组件支持(实际就是OSGi R4.1)。

b.函数式编程的一个重要优点是能够天然地适应并行运行。目前在Java中可以实现函数式编程,但是会带来代码的臃肿,在Java 8中,将会提供Lamda支持来改善对函数式编程的支持。

c.Java虚拟机很早之前就支持64位系统了,但Java程序运行在64位虚拟机上需要付出比较大的额外代价:由于指针膨胀和各种数据类型对其补白的问题,需要消耗更多内存,通常要比32位系统增加10%~30%的内存消耗;在运行速度上全靠面落后于32位虚拟机,大约有15%的性能差距。为此Sun公司提供了指针压缩功能,但是,开启指针压缩会增加执行代码的数量。

1.2 Java技术体系组成

Sun公司所定义的Java技术体系包括以下几个部分:

1)Java程序设计语言

2)JVM

3)Class文件格式

4)Java API类库

5)第三方Java类库

JDK(Java Development Kit,用于支持Java程序开发的最小环境)包括:Java程序设计语言、JVM、Java API类库。

JRE(Java Runtime Environment,支持Java程序运行的标准环境)包括:Java程序设计语言、JVM、Java SE API子集。

《深入理解Java虚拟机》读书笔记——第1章 走近Java

                                                                      JDK 1.8 示意图

按技术领域可以划分成4个平台:

1)Java Card:为Java小程序(Applets)在小内存设备(如智能卡)上运行提供支持。

2)Java ME(Micro Edition):移动终端(手机、PAD)。对Java API有所精简,并加入了针对移动端的支持。

3)Java SE(Standard Edition):桌面级应用。提供了完整的Java核心API。

4)Java EE(Enterpeise Edition):企业级应用(如ERP(Enterprise Resource Planning),CRM(Customer Relationship Management)应用)。除提供Java SE API外,还对其做了大量的扩充并提供了相关部署支持。

2 其他知识点:

1)Class文件:全称Java Class文件。采用C/C++等传统语言编写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台及操作系统的二进制文件,通常一个平台上的二进制可执行文件不能在其他平台上运行,主要是由于这个二进制文件包含了对目标处理器的机器语言。而Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的“机器语言”,与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。

2)JVM通过编译器和解释器协同工作达到高效的目的。

编译器和解释器的联系和区别:解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。

编译器和解释器的联系和区别参见:http://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html