1. 背景
多个业务线的应用出现LongGC告警
最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。
小编总结了2020面试题,这份面试题的包含的模块分为19个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 。
关注公众号:程序员白楠楠,领取2020最新Java面试题手册(200多页PDF文档)。
需要的朋友点我获取:面试题
2. 知识回顾
2.1 JVM堆内存划分
- 新生代(Young Generation)
新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。
- 老年代(Old Generation)
在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。
- 永久代(Perm)
主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。
2.2 CMS垃圾回收的6个重要阶段
1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。
2、concurrent-mark 并发标