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开始.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐