JVM--内存分配策略
Java虚拟机中自动内存管理自动化的解决了两个问题:
1、回收给对象分配的内存
2、给对象分配内存
下面来看给对象分配内存的策略:
一、对象优先在Eden分配
大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机发起Minor GC。
新生代中Eden区与Survivor区的空间比例是8:1。若Survivor空间不够,可通过分配担保机制将对象转移到老年代去。
Minor GC:发生在新生代的垃圾收集动作。
Full GC:发生在老年代的GC。
二、大对象直接进入老年代
大对象:需要大量连续内存空间的Java对象。
新生代采用复制算法收集内存。
三、长期存活的对象将进入老年代
虚拟机采用分代收集的思想管理内存,虚拟机给每个对象定义一个对象年龄计数器。若对象在Eden区被分配内存,并且可以被Survivor容纳,将被移动到Survivor空间,对象年龄设为1。此后每“熬过”一次Minor GC ,年龄增加1,年龄到一定程度,该对象会被晋升到老年代去。
四、动态对象年龄判断
如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象直接进入老年代。
五、空间分配担保
新生代使用复制收集算法,但为了内存利用率只使用其中一个Survivor空间,当出现大量对象在Minor GC后仍然存活的情况,就需要老年代进行分配担保,把Survivor无法容纳的对象直接进入来年代。

浙公网安备 33010602011771号