0%

JVM1-Java介绍

今天开写JVM系列的学习笔记,书籍为周志明的《深入理解Java虚拟机》

走进Java

Java技术体系

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

  • Java程序设计语言
  • 各种硬件平台上的Java虚拟机
  • Class文件格式
  • Java API类库
  • 来自商业机构和开源社区的第三方Java类库

我们把Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK,JDK是用于支持Java程序开发的最小环境。Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE,JRE是支持Java程序运行的标准环境。下图展示了Java技术体系所包含的内容,以及JDK和JRE所覆盖的范围。

Java发展史

1999年HotSpot虚拟机作为JDK1.2附加程序发布,成为JDK1.3及之后版本的Sun JDK默认虚拟机。
2002年5月8日,JDK1.4发布,新特性包括,正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。
2004年2月13日,JDK1.5发布,JDK1.5在Java语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、循环遍历(foreach循环)等语法特性,在虚拟机和API层面上,这个版本改进了Java的内存模型(Java Memory Model, JMM),提供了java.util.concurent并发包等。
2006年12月11日,JDk1.6发布,JDK1.6的改进包括:提供动态语言支持,提供编译API和微型HTTP服务器API等。这个版本对Java虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法。
2011年7月,JDK7发布,由于Sun公司被Oracle收购等各种原因,原计划在JDK7发布的Lambda,Jigsaw和Coin延迟,JDK7的主要改进包括:提供新的G1收集器,加强对非Jaa语言的调用支持,升级类加载架构等。
2014年3月19日,JDK8发布,JDK8改进比较多,最大的改进是Lambda表达式(以及因之带来的函数式接口,很多原有类都做了变更,但能够与以往版本兼容,堪称奇功!),还有Stream API流式处理,joda-time等等一些新特性。但有一些本来计划发布的大变更,比如模块化等推迟到了JDK9中。

Java虚拟机

在JDK1.3之后,HotSpot VM成了Sun JDK和OpenJDK中所带的默认虚拟机。HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术没输出质量更高的本地代码。
我们可以在命令行里执行java -version看看本机上的虚拟机。