在此记录分析所学习的内容,有什么不对的地方望大佬们评论指正
1、什么是JVM
JVM全称Java Virtual Machine(JVM),中文名Java虚拟机。JVM本质是运行在计算机上的一个程序,它的职责是运行Java字节码文件(.class文件)
Java虚拟机有很多,下面简单介绍一些:
世界上第一款商用的Java虚拟机:Sun Classic VM,这款虚拟机只提供了解释器,JIT编译器需要外挂,且解释器和编译器不能配合工作,只能二选一。
Exact VM:为了解决Sun Classic VM解释器和编译器不能配合工作问题,Sun公司在JDK1.2时提供了此虚拟机。该虚拟机具备现代高性能虚拟机雏形:热点探测、解释器和编译器混合工作模式,后面被HotSpot虚拟机替代。
HotSpot VM:目前使用比例比较多的JDK8中,默认的虚拟机。具有热点代码探测技术,且解释器和编译器能协同工作,在响应时间和执行性能中取得平衡。
JRockit VM:专注于服务器端应用,不太关注程序启动速度,因此该虚拟机内部不包含解释器实现,全部代码都靠即时编译器编译后执行。
IBM J9 VM:IBM开发的虚拟机,市场地位与HotSpot接近。
其他虚拟机:Microsoft JVM、Taobao JVM、Java Card VM、Squawk VM 等等,有兴趣可以网络搜索看看。
这里学习记录介绍的虚拟机都是 HotSpot,相关的机制也主要是HotSpot的。
2、JVM的功能
- 解释和运行:将字节码文件的指令解释成机器码让计算机执行
- 内存管理:为对象、方法等分配内存,以及进行垃圾回收
- 及时编译:对热点代码进行优化,提升执行效率。(热点代码:简单的来说就是对一段代码进行计数,每执行一次+1达到设定的阈值则视为热点代码;或者某个方法频繁出入栈顶,就将该方法认定为热点代码)
3、JVM内存结构概
JVM内存结构大概分为:类加载器子系统(Class Loader)、运行时数据区(Runtime Data Area)、执行引擎(Execution Engine)、本地方法接口(Native Method Interface)