gc浅了解

GC 过程

以java官方的HotSpot JVM为例

首先了解堆内存的结构 新生代(伊甸园区,两个幸存区S0,S1)、老年代、永久代 注:JDK1.8以后 永久代去掉了,取而代之的为元数据区Metaspace,其使用的是本地内存

gc全过程

1、新创建对象分配到Eden区,两个幸存区为空

2、Eden区达到容量阈值,新生代发生垃圾回收,称为 Minor GC 或 Young GC

3、通过可达性分析算法找到可达对象,被标识的可达对象转移到S0(此时为From Survivor),存活对象年龄加1,清除Eden所有对象 注:可达性分析算法称为根搜索算法,gc定义了一些根,从根开始不断搜索,能够被引用的对象就不是垃圾,不能被引用的就是垃圾。gc roots(虚拟机栈中引用的对象,方法区中类静态属性引用的对象,方法区中常量引用的对象)

4、Eden再次达到阈值,再次GC,通过可达性分析算法找到的可达对象转移到S1(To Survivor),存活年龄加1,清除Eden和S0中所有对象

5、S0 S1角色互换 S0 为To Survivor,即 To Survivor永远为空(是垃圾回收算法在年轻代的实际应用) 注:很多年轻代垃圾收集器都用复制算法,如ParNew。因为新生代可达对象少,不超过10%,所以搜寻和复制的成本低,并且该复制方法还能避免产生堆内存碎片,提高内存利用率

6、存活年龄不断增加,达到上限会被晋升到老年代,默认15

7、其他晋升方式(大对象直接晋升(避免在年轻代里频繁复制)、动态年龄对象判定)

8、老年代垃圾回收,并不是全局GC,老年代空间是年轻代几倍且老年代对象的存活率高,所以标记过程慢,gc成本高,jvm调优为了减少老年代的时间和频次。 基本不使用复制算法,一般采用标记清除、标记整理算法、就地标记回收。CMS采用标记清除算法,至于内存碎片问题,CMS提供两个参数做碎片整理。

#在找工作求抱抱#
全部评论

相关推荐

2025-11-22 14:21
未填写教育信息 Java
程序员花海:实习太简单了 学历可以的 实习描述应该是先介绍业务 再介绍技术 技术咋推动业务的 做到了啥收益 有没有做实验 实验组和对照组有什么不同 你最后学到了什么 有没有参与处理过线上问题 有没有参与过公司的code review 有没有参与过技术分享 这些都是可以在实习描述中写的 并且实习和项目不一样不会撞车 应该放在最前面 放在教育背景下面 另外项目有点烂大街 可以看下我主页的简历优化案例
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务