前言
大家好。我整理了几道高频的JVM面试题,小伙伴们加油呀!
-
JVM内存为什么要分成新生代,老年代
-
新生代中为什么要分为Eden和Survivor
-
JVM中一次完整的GC流程是怎样的
-
CMS收集器和G1收集器的区别
-
JVM 调优
-
CPU飙升如何排查
1. JVM内存为什么要分成新生代,老年代?
1.1 JVM共享内存划分
-
共享内存区 = 持久代 + 堆(jdk1.8及以上jvm废弃了持久代)
-
持久代 = 方法区 + 其他
-
Java堆 = 老年代 + 新生代
-
新生代 = Eden + S0 + S1
1.2 为什么分年老代和新生代
-
新生代:主要存放新创建的对象,内存大小一般会比较小,垃圾回收会比较频繁。
-
老年代(Tenured Gen):主要存放JVM认为生命周期比较长的对象(经过几次的Young GC的垃圾回收后仍然存在),或者大对象,垃圾回收也相对没有那么频繁。
为什么划分老年代和新生代,主要 对象大小不一样,对象生命周期不一样。划分后,提供垃圾回收效率,节省资源,提升对象利用率 等等。
2. 新生代为何划分Eden和Survivor?为什么设置两个Survivor
-
如果没有Sur