深入理解Java虚拟机第二版学习笔记(一)

 2019-12-22 10:59  阅读(761)
文章分类:JVM

深入理解Java虚拟机第二版学习笔记。

第一章, 走进Java。

1.2 Java技术体系

Sun官方定义的Java技术体系包括以下几个组成部分:

Java程序设计语言;

各种硬件平台上的Java虚拟机;

Class文件格式;

Java API类库;

来自商业机构和开源社区的第三方Java类库。

通常把Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit),jdk是支持Java程序开发的最小环境。

可以把Java API类库中Java SE API子集和Java虚拟机这两部分统称为JRE(Java RuntimeEnvironment),jre是支持Java程序运行的标准环境。

下图是Java技术体系包含的内容,及JDK,JRE的范围

2019120001448\_1.png

上面是根据组成部分的功能进行划分。

按技术服务的领域,或者按Java技术关注的重点业务领域划分,Java技术体系分为4个平台:

Java Card:支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。

Java ME(Micro Edition):支持Java程序运行在移动终端(手机,PDA)上的平台,对JavaAPI有所精简,加入了针对移动终端的支持。

JavaSE(Standard Edition):支持面向桌面级应用的Java平台。

JavaEE(Enterprise Edition):支持使用多层架构的企业应用的Java平台,除了提供java se api外,还对其多了扩充,这些扩充一半以javax.*作为包名,java se api的核心包通常是java.*做包名。

1.4 Java虚拟机发展史

1.4.1 Sun Classic VM,是Sun公司发布JDK1.0中包含的虚拟机。

这款虚拟机只能用纯解释器方式来执行Java代码,如果要使用JIT编译器,就要外挂,而且使用外挂JIT编译器后,JIT就完全接管了虚拟机的执行系统,解释器就不工作了。

由于编译器和解释器不能配合工作,意味着如果要使用编译器执行,编译器就要对每一个方法、每一行代码都进行编译,而不管他们执行的效率是否具有编译的价值。这些编译器不敢应用编译耗时稍高的优化技术,因为会影响程序的响应时间。所以这个时期Java很慢的形象就树立了。

在Jdk1.2时,发不过一款ExactVM虚拟机,它具备了编译器和解释器混合工作的模式。Exact VM(Exact Memory Management)准确式内存管理VM,就是虚拟机可以知道内存中某个位置的数据具体是什么类型。如内存中有个32位的整数123456,它是一个reference类型指向123456的内存地址?还是一个数据值是123456的整数,ExactVM可以分辨出来,这样在GC时能准确判断堆上的数据是否还可能被引用。

1.4.2 Sun HotSpot VM,jdk1.3之后,HotSpot VM作为默认虚拟机。

HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或者方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器和解释器协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,有助于引入更多的代码优化技术,输出跟高质量的本地代码。

1.5 Java技术发展点。

1.5.1 模块化

模块化是解决应用系统和技术平台越来越复杂、越来越庞大问题的一个重要途径。站在软件工业化的高度看,模块化是建立各种功能的标准件的前提。Osgi技术。

1.5.2混合语言

有越来越多的基于Java虚拟机的语言开发被应用到软件项目中。Java平台的多语言混合编程正成为主流,每种语言都可以针对自己擅长的方面更好地解决问题。Java虚拟机从Java语言的虚拟机项多语言虚拟机方向发展。

1.5.3 多核并行

Cpu硬件的发展从高频率转向多核心,随着多核时代的到来,软件开发越来越关注并行编程。Jdk1.5引入的java.util.concurrent包实现了一个粗粒度的并发框架,Jdk1.7加入的java.util.concurrent.forkjoin包是这个框架的一次扩充。Fork/Join模式是处理并行编程的一个经典方法,在此模式的使用范围内,能够轻松利用多个cpu核心提供的计算资源来协作完成一个复杂的计算任务。

2019120001448\_2.png

在Java8中,提供了Lambda支持,极大改善了Java语言不适合函数式编程的现状(之前java语言使用函数式编程,会显得很臃肿),函数式编程的一个优点是这样的程序天然地适合并发运行。

openJdk的子项目Sumatra,显卡的算术运算能力、并行能力已经远远超过CPU,在图形领域以外发掘显卡的潜力是计算机发展的方向之一。Sumatra项目是为Java提供使用GPU(Graphics Processing Units)和APU(Accelerated Processing Units)运算能力的工具。

1.5.4 语法扩充

Java5以来,对Java语法做了几次扩充,加入了自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环等。

Coin项目对语法细节的修改,包括二进制数的原生支持、在switch语句中支持字符串、“< >”操作符、异常处理的改进,简化变长参数方法调用、面向资源的try-catch-finally语句等。

点赞(1)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 深入理解Java虚拟机第二版学习笔记(一)

相关推荐