虚拟机简介

此文章为个人简易备忘录,请参考原著《深入了解java虚拟机》
JVM 简介
Java 虚拟机为所有物理机建立了一个统一的运行平台。在任何虚拟机上编译的程序能在任何虚拟机运行,虚拟层面隐藏了底层技术复杂性和操作系统差异性。
优点
相比于C/C++,Java 开发主要集中在业务逻辑上而硬件兼容性。因此应用开发更加高效和快捷。
缺点
为了给所有硬件提供一致的虚拟平台,Java硬件效能相对得减少。以至于大多数形况下提升硬件性能无法获得同比的性能回报。
为什么需要学习?
–深入了解虚拟机的运作原理可以帮助程序员写出具有高度适应性的代码
–帮助排查内存错误
–自动运作特性可以帮助java程序员成长
–对于企业级开发至关重要
Java虚拟机重要版本
暂时只列举比较重要的三个
Classic Vm (java 1.0 版本)
只能用纯解释器执行java代码,JIT编译器只能外挂。两者不能配合工作。如果使用编译器,每一行代码都要进行编译,导致运行速度缓慢。

如上图所示:解释器和jit不能同时使用,jit会对重复代码进行缓存,消耗内存
解释器每行都读取,不能简化for loop这样的代码。效率低
Exact Vm (java 1.2 版本)
编译器,解释器混合工作模式。添加准确式内存管理,可以知道内存中某个位置的数据类型,这样可以在GC时准确判断堆上的数据是否可能被使用。减少简介查找开销。
Hotspot VM 1.2 开始
通过热点代码探测能力和执行计数器找出频繁使用的代码,通过JIT编译器以方法为单位进行编译。
JVM 生命周期
启动与执行
JVM启动是通过bootstrap class loader 创建一个initial class 完成的。
所谓的java程序其实执行的是虚拟机进程。只有该程序开始执行时,JVM才运行,程序结束时才停止。
JVM结束方式
- 程序执行结束
- 程序执行过程中异常终止
- 操作系统错误导致终止
- 线程调用Runtime class halt method 并且安全管理器允许操作, 或者 system class exit method
- JNI(Java Native Interface)load or uninstall JVM
整体过程图

GC
对于C/C++开发人员而言,他们拥有对每一个对象的所有权并且要维护一整个生命周期。所以内存泄漏和内存溢出必须时刻关注。
对于JAVA开发人员而言,内存管理机制操作对象生命周期,不容易出现内存泄漏和溢出问题。一旦出现问题排查难度较高。
[返回JVM目录]