AmmoMercy的技术博客

Stay hungry, stay foolish.

0%

深入理解JVM1 JDK、JRE与JVM

0.概念

JVM

JAVA编译产生字节码,字节码运行于JVM之上。使用JVM的好处:一是“一次编写到处运行”,只要统一虚拟机标准将底层操作系统与硬件封装,字节码的运行就可以无视操作系统和指令集平台,但是到现在看起来使离这个目标越来越远了。二是可以替程序员进行诸如内存分配、垃圾收集等工作,使程序员专注于项目开发。

jdk

jvm+JAVA API类库+JAVA语言本身

是用来开发最小环境,我们一般都认为

JRE

jre=jvm+SE api

用来运行的标准环境

1.JAVA发展史关键节点

Sun开发了JDK1.0以及第一个JVM Sun classic VM

Longview tech开发了鼎鼎有名的Hotspot的前身 ,后该公司被Sun收购,之后Hotspot在JDK1.2中作为附加程序发布,JDK1.3之后作为默认虚拟机发布。

JDK1.6 后Sun宣布在GPL v2下开源JDK,开源项目名为Open JDK,其与SUN JDK基本无异。

JDK1.7因为种种原因“缩水+跳票”,同时Oracle收购了Sun。而在此之前Oracle收购了BEA,至此Oracle拥有了三大虚拟机中的两个:HotSpot和JRockit。

2.几款重要的虚拟机

Classic VM

第一款JAVA虚拟机,纯解释运行。如果想编译运行,需要外挂Sun wjit等编译器,这时就变成了纯编译运行。这就导致他的效率很低,JAVA很慢的刻板印象也从此而来。其从JDK1.0到JDK1.2都是默认的虚拟机。

Exact VM

所谓的Exact是指准确式内存管理,即在虚拟机里有专门的数据结构来记录哪个内存位置存放了引用,以便在更改和回收对象时确定到底哪里是引用。同时这个虚拟机有两级即时编译器和编译器与解释器混合工作等现代高性能虚拟机的雏形。但其只来得及发布Solaris版本就被HotSpot取代了。

HopSpot VM

Hotspot命名源于其热点代码探测技术,即根据执行计数器找到代码执行的“热点”,如循环,多次调用的方法等,对其进行编译。是现在使用范围最广泛的虚拟机。

3.展望未来

这里的未来也可以看作JDK1.7“缩水”的内容(误

模块化

参见:https://zhuanlan.zhihu.com/p/24800180

混合语言

在JVM上运行别的语言,但这些语言需要额外的JVM实现版本,如JS在JVM的实现版本Rhino。

并行

在CPU核心数越来越多的今天,JDK8引入函数式编程这一天生就适合多核并行的编程方式,有效地为JAVA注入了新的生命。同时,为了利用显卡的算力,Open JDK还有一个Sumatra项目。以及在集群方面,还有Apache的Hadoop等等项目,不再赘述。

64位虚拟机

在机器平台逐渐由32位向64位过渡的今天,JVM也有了64位的版本,尽管现在性能并不尽人意,但总归会过渡到64位平台。