JVM对象创建内存分配
对象创建的主要流程:
检查加载类–》分配内存–》初始化–》设置对象头–》实例化,执行init方法。
在内存分配中,虚拟机将为新生对象内存分配
Minor GC : 新生代垃圾收集,特点是频繁,回收速度快;
Full GC : 老年代回收,慢;
Eden 与Survivor区默认是 8:1:1
大量的对象被分配在eden区,满了后触发minor gc; 垃圾回收后,剩余少量存活的被挪到survivor区,下一次eden区满了后,再次触发minor gc, 把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪到另一块空的survivor区。
一般情况,让eden区尽量大,survivor够用即可;
案例
假设分配为3G的,年轻代和老年代为1G和2G;
其中eden比为 8:1:1
假设每秒产生500个订单,每秒产生的对象假设为100M;运行8秒,即可占满eden区,即每8秒有100M到老年代,触发Full Gc;
大量的full GC;
修改:将年轻代调大翻倍,此时运行第16秒后,移动到survivor区,下次minor gc,少量的移动到老年代;减少full GC;