这篇博文总结的很好,可作为参考 JVM总结
常见问题及解决可见 JVM调优总结
JVM内存为什么要分成新生代、老年代
其实不分代也可以,但是分代是为了优化GC性能。如果不分代,所有对象都放在一块,那么GC的时候就要对堆的所有区域进行扫描,效率低下,因为很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。总结:这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
Java 中的堆也是 GC 收集垃圾的主要区域。GC 分为两种:Minor GC、Full GC ( 或称为 Major GC )。对年轻代的垃圾回收称作初级回收 (minor gc),采用复制算法。Full GC 是发生在老年代的垃圾收集动作,采用标记-清除或者标记-整理算法。
HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1:1,为啥默认会是这个比例,接下来我们会聊到。一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活