1.Java GC、新生代、老年代
堆是虚拟机管理的最大一块内存空间,主要用于存放各种类的实例对象。
Java中,为了更好的的管理内存中的对象,包括内存的分配和回收。
堆(60M)=新生代(18M)+老年代(42M).
新生代(18M)=Eden(16M)+from Survivor+to Survivor.
老年代耗时是新生代的22倍。
堆的大小可以通过参数指定,虚拟机每次使用的时候会用Eden+一块survivor区域。即9/10的新生代空间。
(1)GC :强制立即回收垃圾,即释放内存(将对象所有引用赋值为Null,由GC自动回收)。 分为 Minor GC 和 Full GC(Major GC)
GC收集垃圾的主要区域是堆,Minor GC是发生在新生代的垃圾收集动作,采用复制算法,Full GC是发生在老年代的垃圾回收动作,采用标记-清除算法。
**新生代几乎是所有Java对象出生的地方,在Eden+一块survivor中出生,经过一次Minor GC后如果还存活,就被复制到另一块survivor中保存,并将年龄设为1,此后每经过一次Minor GC后年龄加1.当年龄到达某个值时就变为老年态。对于一些需要耗费大块连续内存区域时,直接进入老年态。新生代中的对象生命周期短,由GC来回收Eden+survivor中的内存。
**老年代标记-清除算法收集垃圾的时候会产生许多的内存碎片 ( 即不连续的内存空间 ),此后需要为较大的对象分配内存空间时,若无法找到足够的连续的内存空间,就会提前触发一次 GC 的收集动作。
java GC、新生代、老年代
最新推荐文章于 2021-10-19 16:30:25 发布