2 Star 65 Fork 54

柳诗妍 / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
40.md 1.64 KB
一键复制 编辑 原始数据 按行查看 历史
leelovejava 提交于 2020-03-31 11:56 . 第三季 JVM

40、说说老年代的垃圾回收算法?常用的垃圾回收器都有什么?

老年代对象越来越多,是不是会发现说,老年代的内存空间也会满的,可以不可以使用类似年轻代的复制算法,不合适的,因为老年代里的对象,很多都是被长期引用的,spring容器管理的各种bean

长期存活的对象是比较多的,可能甚至有几百MB

对老年代而言,他里面垃圾对象可能是没有那么多的,标记-清理,找出来那些垃圾对象,然后直接把垃圾对象在老年代里清理掉,标记-整理,把老年代里的存活对象标记出来,移动到一起,存活对象压缩到一片内存空间里去

剩余的空间都是垃圾对象整个给清理掉,剩余的都是连续的可用的内存空间,解决了内存碎片的一个问题

parnew+cms的组合,g1直接分代回收,新版本,慢慢的就是主推g1垃圾回收器了,以后会淘汰掉parnew+cms的组合,jdk 8~jdk 9比较居多一些,parnew+cms的组合比较多一些,是这么一个情况

分成好几个阶段,初始标记,并发标记,并发清理,等等,老年代垃圾回收是比较慢的,一般起码比年轻代垃圾回收慢个10倍以上,cms的垃圾回收算法,刚开始用标记-清理,标记出来垃圾对象,清理掉一些垃圾对象,整理,把一些存活的对象压缩到一起,避免内存碎片的产生

执行一个比较慢的垃圾回收,还要stop the world,需要100mb,此时就会让系统停顿100ms,不能处理任何请求,尽可能的让垃圾回收和工作线程的运行,并发着来执行

Java
1
https://gitee.com/th_520/Java-Interview-Advanced.git
git@gitee.com:th_520/Java-Interview-Advanced.git
th_520
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助