内存模型图:
一、堆内存划分
1.新生代(Eden:s0:s1=8:1:1) (对应Minor GC)
1.1 Eden区
新建对象存放在该区
1.2 Survivor区
1.2.1 S0区(from)
在Eden区活跃的对象会被移到该区
1.2.2 S1区(to)
同S0区一样,但S0和S1必定有一个是空闲的。S0和S1大小相等,主要用于复制算法的交换,减少碎片化
设计成三个区主要是为了解决内存碎片的问题,通过浪费10%的空间来处理碎片化问题是可以接收的。
2.老年代 (对应Major GC)
存放比较活跃的对象,经常被引用的对象(被GC验证过多次大于15次,就会从新生代移至老年代),或者大对象放不下的情况会触发一个担保机制,会去借用Old区的空间。
新生代和老年代的默认比例是1:2(可以配置比例)
Young区和Old区一起GC( Full GC)
二、监控工具
1.jvisualVM(要先配好环境变量)
2.需要下载插件
https://visualvm.github.io/pluginscenters.html