JVM详解 - 决定一个人段位的是对知识的认知层次

原创
2020/03/01 22:28
阅读数 858

JVM详解


JVM详解  1、JVM 运行时数据区  2、方法区  3、堆内存: 4、虚拟机栈: 5、java程序运行过程(例子): 6、JVM 知识图谱:

1、JVM 运行时数据区

线程共享:所有线程能访问这块内存数据,随虚拟机或者GC而创建和销毁

线程独占:每个线程都会有它独立的空间,随线程生命周期而创建和销毁

2、方法区

  • 作用:存储加载的类信息、常量、静态变量、JIT编译后的代码等数据。

  • GC:方法区存在垃圾回收,但是回收效率低

    回收主要针对常量池的回收,和类型的卸载;

    当方法区无法满足内存需求时,报OOM.

3、堆内存:

  • 作用:唯一的目的就是存放对象实例,几乎所有的对象、数组都在这里存放。

  • 对于大多数应用来说,堆是JVM管理的内存中最大的一块内存区域,也是最容易OOM的区域。

  • 大多数JVM都将堆实现为大小可扩展的(通过-Xmx、-Xms控制)。

  • 对象何时被回收:引用计数器算法(存在两个对象相互引用的问题)

    可达性分析算法:主流的商用程序语言(java)都是通过可达性分析算法来判定对象是否存活,

    GC Roots可以是:虚拟机栈、方法中静态属性引用的对象、方法区中常量引用的对象,Native方法引用对象、

4、虚拟机栈:

  • 线程中方法执行的模型,每个方法执行时,就会在虚拟机中创建一个栈帧,每个方法从调用到执行的过程,就对应着栈帧在虚拟机栈中从入栈到出栈的过程。

  • 本地方法栈:和虚拟机栈功能类似,虚拟机栈是为虚拟机执行JAVA方法而准备的,本地方法栈是为虚拟机使用Native本地方法而准备的。

  • 直接内存:JVM之外的内存,开发人员自己分配/回收内存。

5、java程序运行过程(例子):

6、JVM 知识图谱:


展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部