2. 垃圾收集器与内存分配策略(二)

上一篇我们已经讨论了内存回收的内容,我们再来说一下,对象的内存分配策略

往大方向讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启用了本地线程分配缓冲,将按线程优先在TLAB上分配。

普遍的内存分配规则:

(1)对象优先在Eden分配

  大多数情况下,对象在Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC

(2)大对象直接进入老年代

 所谓的大对象是指,需要大量连续内存空间的java对象,最典型的大对象就是那种很长的字符串以及数组

(3)长期存活的对象将进入老年代

 既然虚拟机采用了分代收集的思想管理内存,那内存回收时就必须能识别哪些对象在新生代、哪些在老年代。为了做到这一点,虚拟机给每个对象定义一个对象年龄计数器。如果对象在Eden出生并经过第一次Minor GC后仍然存活,且能够被Survivor容纳的话,将被移到Survivor中,并且对象年龄设为1.对象在Survior中每熬过一次GC,年龄就增加1岁,当晋升到一定年龄(默认15岁),将会晋升到老年代中。



猜你喜欢

转载自blog.csdn.net/oyeyuanxinzhizhu1/article/details/81066558