内存分配策略
1)大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。
(注:Minor GC和Full GC的区别:新生代GC即Minor GC,指发生在新生代的垃圾收集侗族,因为Java对象大多都具备招生熄灭的特性,所以Minor GC非常频繁,一般回收速度也比较快;老年代GC即Full GC或称Major GC,只发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC。其效率比Minor GC慢10倍以上)
2)大对象直接进入老年代。大对象指需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串以及数组(byte[]数组就是典型的大对象)
大对象直接进入老年代是防止进入新生代的大对象产生大规模复制动作。
3)长期存活的对象将进入老年代。
JVM给每个对象定义了一个对象年龄计数器。对象每“熬过”一次Minor GC,年龄就加一,默认到达15岁后会进入老年代。
动态对象年龄判定:如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。