对象的内存分配,从大方向将就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配。
1. 对象优先在Eden区分配:大多数情况下,对象在新生代Eden区中分配。
2. 大对象直接进入老年代:这里的大对象是指需要大量连续内存空间的java对象,例如很长的字符串以及数组
3. 长期存活的对象将进入老年代:一定次数的Minor GC后仍然存活的对象,将进入老年代
4. 动态对象年龄判定:为了动态更好地适应不同程序的内存状况,虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThershod才能晋升为老年代
5. 空间分配担保