JVM、JDK和JRE

2019-11-19 来源: 要勤思考 发布在  https://www.cnblogs.com/shanbei/p/11892878.html

JVM,JDK,JRE

什么是JVM

Java 虚拟机。
这个名词由Java和虚拟机前后两部分组成
它有和其他虚拟机共性:JVM是通过软件模拟的计算机系统。
它也有自己的特性:JVM使用软件模拟的指令集是Java字节码,通过字节码这个中间层做到屏蔽对系统的依赖

追问:什么是字节码?字节码的好处?

字节码是Java虚拟机的指令,是具有一个字节长度的数字。

好处:和解释性语言相比解决了传统解释性语言执行效率低的问题,同时保留了语言可移植性的特点。所以Java程序高效且无需重新编译便可在多种不同操作系统上运行。
原因是:对于一般的代码,JVM将字节码解释执行,屏蔽对系统的依赖;对于热点的代码,会通过JIT动态编译为机器码,提高执行效率。

再追问:什么是JIT?

JIT是Just In Time的意思,也就是即时编译

再追问:即时编译那么快,为什么不全部都进行即时编译呢?

引用博客园ddzz1991
空间开销的角度看:
对一般的Java方法而言,编译后代码的大小相对于字节码的大小,膨胀比达到10x,如果把所有代码都编译则会显著增加代码所占空间,导致“代码爆炸”。
时间开销的角度看:
对比解释执行和动态编译
解释器的执行,抽象的看:字节码 -> [ 解释器 解释执行 ] -> 执行结果
JIT编译然后再执行的话,抽象的看:字节码 -> [ 编译器 编译 ] -> 机器码 -> [ 执行 ] -> 执行结果
快在哪里呢? 不是“编译”或者“编译+执行”这个动作比“解释”这个动作快,而是 “执行机器码”比“解释执行”要快。 因为,仅仅JIT编译本身就比解释执行一次略慢一些。
对于只执行一次的代码,解释执行比JIT编译更快。 如果JIT编译所有代码,反而会变慢。

JDK和JRE

根据Oracle官方文档

The JRE allows you to run applications written in the Java programming language. Like the JDK, it contains the Java Virtual Machine (JVM), classes comprising the Java platform API, and supporting files. Unlike the JDK, it does not contain development tools such as compilers and debuggers.

翻译: JRE能运行Java语言编写的程序,和JDK一样包含了JVM,包含Java平台API的类等等。和JDK不同之处: 不包含编译器调试器等开发工具。

从Java9开始,就没有单独的JRE了

相关文章