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 知识图谱:
以上是 JVM详解决定一个人段位的是对知识的认知层次 的全部内容, 来源链接: utcz.com/z/514000.html