java -version 命令大家都用过,大部分就是看下jdk版本或检查下环境变量的设置,但最后一行的信息也挺重要,如下图所示:
Server VM表示我们的虚拟机类型,mixed mode表示虚拟机以混合模式工作。
一. 虚拟机
先说下本篇文章的内容都是基于HotSpot虚拟机。
我们熟知的Java虚拟机是一种规范标准,有多种实现,比如HotSpot虚拟机就是JVM的一种实现,也是目前使用范围最广的Java虚拟机。其实HotSpot最早也不是Sun开发的,是他早期收购的一家公司开发的,后来Sun把JDK开源后,OpenJDK诞生了,所以HotSpot成了这两个JDK共用的虚拟机。
除了HotSpot虚拟机,Oracle原来的JRockit VM也是Java虚拟机的实现(后面会把HotSpot和JRockit整合),还有IBM也有对应的VM实现。
为什么叫HotSpot虚拟机?
如同它的名字,它的特点就是热点代码探测技术,这个技术可以通过执行计数器找出最具有编译价值的代码,然后通过JIT即时编译成机器码并缓存起来,提高执行效率。
而JIT编译只是一种概念,HotSpot内置C1,C2这两种编译器实现:
C1:编译时间短,优化策略简单C2:编译时间长,优化策略复杂
C1,C2都属于JIT编译技术,是JIT的不同实现
二. 虚拟机类型client s