JAVA虚拟机概述
1. 几个问题
1.1.Java Virtual Machine(简称JVM)是什么?
JVM是一种用于计算设备的规范,用于在实际的计算机上模拟实体计算机功能的虚拟计算机规范。JVM提供的基于抽象规格描述的计算机模型,为解释程序开发人员提供了很好的灵活性(,同时也确保Java代码可在符合该规范的任何系统上运行。JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是:
JVM指令系统,JVM寄存器(PC寄存器等),JVM栈结构,JVM碎片回收堆,JVM存储区。
1.2. JVM有哪些版本?
1.3. JVM是用什么语言实现的?
实际上,任何语言都能够实现JVM,只要符合JVM的规范即可。Java语言本身也可以实现JVM,只是需要在JVM上面跑,这似乎是个哲学问题。。。
1.4. JDK,JRE,JVM,编译器,这几者之间是什么联系?
从小的开始:JVM已经讲了,就是运行在实体计算机平台上,模拟计算机功能的虚拟机,讲的具体点就是bin目录下的jvm.dll文件;里面最重要的是执行引擎。Jre= jvm + lib:java runtime environment,Java的运行环境,有了jre才能运行java程序,最重要的是rt.jar,JAVA基础类库。Jdk=jre+工具(javac,java,javadoc等)+java基础类库(主要如tools.jar,dt.jar等)。举个例子:使用javac编译器编译时出现下面的错误提示:
解析:输入的javac的命令不是去JDK中bin目录去找的javac.exe,而是去JDK中lib目录中的tools.jar中com.sun.tools.javac.Main中执行,javac.exe只是一个包装器(Wrapper),存在的目的只是为了让开发者免于输入过长的指命。儿操作系统装入JVM,则是通过jdk/bin中的Java.exe来完成。
总结:JDK包含JRE,而JRE包含JVM,总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能,Eclipse、IntelliJ IDEA等其他IDE有自己的编译器而不是用JDK bin目录中自带的javac。
2. JVM的体系结构
再给出JVM自身的体系结构
从上图可以看到:JVM结构主要包括两个子系统和两个组件。两个子系统分别是Classloader子系统和Execution engine(执行引擎)子系统;两个组件分别是Runtime data area(运行时数据区域)组件和Native interface(本地接口)组件。