堆(Heap)

1、堆空间是线程共享。那么问题来了,它既然是共享是怎么保证多个线程同时操作引发的安全问题呢?是这样的,堆当中为每一个线程都划分了一个叫做TLAB的区域,以此来保证线程间的操作是安全的。

2、堆中又划分为新生代区、老年代区,其中新生代中又划分为Eden(伊甸园区)、幸存者0区(S0)和幸存者1区(S1),幸存者区还可以叫做From区和To区,幸存者From区和To区不是固定的,它们是动态的来回交换的。
深入理解JVM--堆(Heap)篇【图文】
3、默认新生代中Eden(伊甸园)区、幸存0区和幸存1区多占内存大小比例是8:1:1,新生代和老年代内存大小比例是1:2。初始堆空间默认大小是物理内存的1 / 64(-Xms),最大堆空间默认大小是物理内存1 / 4(-Xmx)。
深入理解JVM--堆(Heap)篇【图文】
4、对象从新生代的Eden区创建到老年代的过程。(IBM:80%左右的对象都是在Eden区被创建,大部分都是“朝生夕死”的)

① 红色的GC掉,绿色的幸存存到S0区,age+1。
深入理解JVM--堆(Heap)篇【图文】
② 红色的GC(垃圾回收)掉,绿色的幸存全部存到S1区,age+1,其中S0的到S1是通过复制算法全部复制过来的,此时S0区为空。为了降低碎片化
深入理解JVM--堆(Heap)篇【图文】
③ 当幸存区有对象age即将要为16时,下一次GC后要是它仍然还有引用没有被GC掉就将这些对象转移到老年代。
深入理解JVM--堆(Heap)篇【图文】
深入理解JVM--堆(Heap)篇【图文】

深入理解JVM--堆(Heap)篇【图文】
尚硅谷深解Java虚拟机(JVM)内存结构各部分总结【三层划分】https://blog.csdn.net/qq_43012792/article/details/107358550
更新中…
有用点个关注,手留余香!

相关文章: