Java虚拟机-JVM特性总结分享(1)

Java虚拟机-JVM特性总结分享(1)

图1 深入理解java虚拟机封面

大家好!最近第三遍看这本书,颇有心得,自己也算深入的了解到了不少知识,从这本书里提取了自己认为比较重要的知识点分享给大家,还有自己的一些图例总结。

侧重于本书的以下几章内容:第2章-java内存区域与内存溢出异常第3章-垃圾收集器与垃圾回收策略第6章-类文件结构第7章-虚拟机类加载机制第8章-虚拟机字节码执行引擎。下图是我自己绘制的一个图例,简单介绍了一下这几章之间的联系:

Java虚拟机-JVM特性总结分享(1)

图2 主要章节链接图例

从上图可以看出,这几个主要章节是有一定的内在联系。虚拟机中内存占用最大的就是堆内存,而对象的实例就存在堆中,所以这部分内存的使用效率最高。java语言是面向对象的,而对象是怎样来占用堆中这部分内存的呢?下面内容或者下面几期我会为大家揭开迷雾!

当然,java虚拟机中不仅仅只有占用内存还有:java虚拟机栈程序计数器本地方法栈方法区这5类瓜分虚拟机内存。如下图:

Java虚拟机-JVM特性总结分享(1)

图3 运行时数据区

如上图所示,由java虚拟机管理的这五部分数据区域,可分为两大类:一类是线程共享的,一类是线程私有的。而线程私有的数据区,每一部分的内存和线程的生命周期相同,每个线程之间互不影响,独立存储。

线程共享的区域可分为:java堆(占用的内存最大)、方法区

java堆:在虚拟机启动时创建,几乎所有对象的实例都在堆上分配内存。是垃圾收集器管理的主要区域

方法区:主要存储运行时常量池、常量、静态变量、已被虚拟机加载的类信息、即时编译器编译后的代码等数据

线程私有的区域可分为:程序计数器、java虚拟机栈、本地方法栈

程序计数器: 存储当前线程执行的字节码的行号指示器

java虚拟机栈: 是描述java方法执行的内存模型,每个方法在执行时都会申请一段内存存放方法执行时的数据,称为栈帧;其包含局部变量、操作数栈、动态链接、方法出口等数据。JVM是基于栈的,所以每个方法从开始执行到结束,对应这一个栈帧在虚拟机中入栈到出栈的过程。

下期会接着分享类加载机制~敬请期待!


分享到:


相關文章: