1 对象进入老年代的几种情况
- 当对象创建的时候,尝试往伊甸园区放入的时候,发现空间不足,此时直接进入老年代。这个地方做一些修正吧,当发现伊甸园区的空间不足的时候,会首先进行一次GC,尝试把伊甸园区的对象移动到s区,如果发现s区无法装下这个对象,则会把这个对象放入老年代。如果可以装下。则复制到s区。此时如果伊甸园区还是装不下,再放入老年代。
- 当在进行MinGC的时候,在朝向s0区进行复制的时候,发现s0这个区域满了。此时直接把这个区域的放入到老年代
- 当在s0区中的相同年龄的对象所占据的空间大于s0区域的一半时,则直接把大于等于这些年龄的对象直接放入到老年代。这个地方可以这样理解,因为此时,JVM认为,你们相同的年龄占据了这么大的一部分空间了,后面可能仍然全部持续增长,直接全进入老年代得了。
2 JVM对于多线程场景向堆空间存储的并发优化
JVM为每个线程建立了缓存缓冲区,TLAB。以便当多个线程同时访问堆内存的时候降低因并发导致的开销。这个TLAB区域在伊甸园区中创建。