1.HotSpot简介:
sun公司从jdk1.3.1开始使用HotSpot虚拟机,主要使用c++实现的,它是较新的Java虚拟机,可以大大提高运行性能。java原先是把源代码编译为字节码在虚拟机上运行(JIT),这样执行速度较慢。而HotSpot讲部分常用的代码编译为本地代码,这样显著提高了性能。
HotSpot包括一个解释器和两个编译器(client和server,二选一),解释和编译混合执行,默认启动解释执行。
编译器:Java源代码被编译器编译为class文件,Java字节码在运行时可以被动态编译(JIT)成本地代码(前提是解释与编译混合执行且虚拟机不是刚启动时)
解释器:解释器用来解释class文件。
server启动慢,占用内存多,执行效率高,适用于服务器端应用
client启动快,占用内存小,执行效率没有server高,默认情况下不进行动态编译,适用于桌面应用程序
client默认关闭,server默认开启
2.动态编译:
HotSpot在程序运行过程中编译。
Java字节码是以解释的方式被加载到虚拟机中,程序运行过程中,对程序运行效率影响大的代码被称为热点(hotspot),HotSpot会把这些热点动态的编译成机器码,同时对机器码进行优化,对那些较少运行的代码,HotSpot就不会把他们编译。
HotSpot对字节码有三层处理:不编译、编译、编译并优化---->由监视器决定