分代模型分为 老年代 年轻代 永久代
回收过程
当开始执行一个方法的时候,创建一个栈帧将其压入栈中,如图所示,当执行完成之后弹出栈帧,此时该栈帧与堆内存实例出来的对象无关,所以回收线程可对堆内存实例化的资源进行回收
改造代码
此时我们将其改造一下
老年代与年轻代
将这个变量变成全局变量,此时,就会引出两个概念[年轻代]和[老年代]
年轻代就是创建很快就被回收的对象
老年代就是很久不被回收的对象
比如说案例一中不断新建不断回收-,就是一直在年轻代。
但是案例二创建了静态全局变量,这个对象一开始处于年轻代,不久之后会转成老年代
为什么要分年轻代和老年代
垃圾回收分两类,分别可以用不同的算法对其进行回收
什么是永生代?
永生代就比如方法区,存储一些类信息的
垃圾回收的时间
在年轻代的时期,并不是所有无关联的对象会被立刻回收掉,只有当年轻代内存堆积满了,到一定程度的时候,JVM会触发MinorGC机制,换种说法就是熟知的YoungGC机制
那么JVM如何判定年轻代可以进入老年代的?
-长期的年轻代会躲过多次回收
每次回收都会+1岁,也就是说假如躲过了15次,就是十五岁,JVM规定,当一个变量到达10岁的时候(躲过十次回收),他就是个老人了,将会被转移到老年代中
那么老年代也会有回收机制吗?
当老年代的空间满的时候,也会出现回收