前言
大家好,整理了几道高频的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的垃圾回收后仍然存在),或者大对象,垃圾回收也相对没有那么频繁。
为什么划分老年代和新生代,主要对象大小不一样,对象生命周期不一样。划分后,提供垃圾回收效率,节省资源,提升对象利用率等等。