SUN的JDK从1.3.1开始使用HotSpot虚拟机技术,主要使用C++实现,JNI接口部分用C实现.
JAVA原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢.而HotSpot编译器将常用的部分代码编译为本地(native)代码,这样显著高了性能.
HotSpot包括一个解释器和两个编译器,解释与编译混合执行模式,默认启动解释执行。
编译器:java源代码被编译器编译成class文件(字节码),java字节码在运行时可以被动态编译(JIT)成本地代码
解释器: 解释器用来解释class文件(字节码).
server启动慢,占用内存多,执行效率高,适用于服务器端应用;
client启动快,占用内存小,执行效率没有server快,默认情况下不进行动态编译,适用于桌面应用程序。
java-version
Java HotSpot(TM) Client VM (build 14.3-b01,mixed mode, sharing)
mixed mode 解释与编译 混合的执行模式 默认使用这种模式
java -Xint -version
Java HotSpot(TM) Client VM (build 14.3-b01,interpreted mode, sharing)
interpreted 纯解释模式禁用JIT编译
java-Xcomp -version
Java HotSpot(TM) Client VM (build 14.3-b01,compiled mode, sharing)
compiled 纯编译模式(如果方法无法编译,则回退到解释模式执行无法编译的方法)
JAVA应用由应用线程和JVM系统线程组成:
?VMThread
? VMPeriodic Task Thread
?Finalizer(java)
?Reference Handler(java)
?CompilerThread
? SignalDispatcher
? Attach Listener
? LowMemory Detector
Java代码编译是由Java源码编译器来完成,流程图如下所示:
生成的class文件由以下部分组成, CLASS文件信息可以通过JAVAP查看:
?结构信息。包括class文件格式版本号及各部分的数量与大小的信息
?元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池
?方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、操作数栈与局部变量区大小、操作数栈的类型记录(StackMapTable)、调试符号信息(LineNumberTable)
Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
-XX:+PrintCompilation或-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly YourMainClass通过反汇编插件打印JIT编译生成的代码,jdk1.6U20开始.
版权声明:本文为博主原创文章,未经博主允许不得转载。