分代模型分为 老年代 年轻代 永久代

JVM学习笔记-JVM内存分配问题

回收过程

当开始执行一个方法的时候,创建一个栈帧将其压入栈中,如图所示,当执行完成之后弹出栈帧,此时该栈帧与堆内存实例出来的对象无关,所以回收线程可对堆内存实例化的资源进行回收

JVM学习笔记-JVM内存分配问题

改造代码

此时我们将其改造一下
JVM学习笔记-JVM内存分配问题

老年代与年轻代

将这个变量变成全局变量,此时,就会引出两个概念[年轻代]和[老年代]

年轻代就是创建很快就被回收的对象
老年代就是很久不被回收的对象
比如说案例一中不断新建不断回收-,就是一直在年轻代。
但是案例二创建了静态全局变量,这个对象一开始处于年轻代,不久之后会转成老年代

为什么要分年轻代和老年代

垃圾回收分两类,分别可以用不同的算法对其进行回收

什么是永生代?

永生代就比如方法区,存储一些类信息的

垃圾回收的时间

在年轻代的时期,并不是所有无关联的对象会被立刻回收掉,只有当年轻代内存堆积满了,到一定程度的时候,JVM会触发MinorGC机制,换种说法就是熟知的YoungGC机制

那么JVM如何判定年轻代可以进入老年代的?

-长期的年轻代会躲过多次回收
每次回收都会+1岁,也就是说假如躲过了15次,就是十五岁,JVM规定,当一个变量到达10岁的时候(躲过十次回收),他就是个老人了,将会被转移到老年代中

那么老年代也会有回收机制吗?

当老年代的空间满的时候,也会出现回收

相关文章: