提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、JVM是什么?
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
二、JVM组成部分
JVM主要由四大部分组成:
- 类加载系统
- 运行时数据区
- 堆
- 新生代
- 伊甸园区
- 幸存1区
- 幸存2区
- 老年代
- 新生代
- 虚拟机栈
- 方法区
- 本地方法栈
- 程序计数器
- 堆
- 执行引擎
- 本地库接口
类加载子系统
负责将.class字节码文件加载到jvm内存中去。
运行时数据区
- 堆
java堆是所有线程共享的内存区域。堆的主要作用是存放对象实例,虚拟机栈存放对象引用地址。JVM中堆是最经常发生GC的内存区域。
java堆实现了分代收集的思想。设计者将堆分为新生代、老年代两块区域(jdk1.8)。
新生代对象朝生夕死,存活率很低。老年代对象存活率高。新生代和老年代在堆中默认内存比例为1:2。
其中新生代又被花费为三块空间,分别是伊甸园区、幸存1区、幸存2区,新生代内存空间分配默认比例为8:1:1。
- 虚拟机栈
线程私有,存放类的成员方法、成员变量,对象的引用地址。 - 方法区
存放加载到内存中的类的信息,静态方法、静态变量、常量。 - 本地方法栈
存放虚拟机用到的本地方法 - 程序计数器
在JVM概念模型中,字节码解释器通过改变程序计数器的值来选取下一条字节码指令。
执行引擎
主要作用是将字节码指令解释或者编译为对应平台上的本地机器指令。
本地方法库接口
负责调用本地方法库中的本地方法。
总结
以上是本人对JVM内存模型的一些浅见,如果有某些地方有误,敬请指正