写点什么

第九周

用户头像
hdhdh
关注
发布于: 2020 年 08 月 03 日

请简述 JVM 垃圾回收原理


当 jvm 中的对象,不再被使用后,将会被 jvm 垃圾回收清除掉,释放资源


怎么确定这个对象不再使用?

使用的是可达性分析的方式。当一个对象到 GC root 没有任何相连的引用链时,就认为这个对象不再使用了


jvm 主要采用分代的垃圾回收算法

即 把堆,分成新生代 和 老年代两部分,其中 新生代,又分为 Eden 区,from 区,to 区

所谓新生代 老年代,实际就是看躲过 gc 的次数,存活一次“年龄”加 1,多次之后,对象就从新生走向老年

对象的新创建都在 Eden 区中,当 Eden 区中的对象躲过一次 gc 后,会移动到 from 区中,如果 再次 gc,Eden 中的和 from 中存活的对象会移动到 to 区中,再次 gc,Eden 中的和 to 中的存活对象,会移动到 from 区中,也就是说 from 区或者 to 区,存储着新生代中的 gc 后存活的对象。实际,from to 区就是为了转移新生代中存活的数据存在的。

之后,如果达到一定的 gc 次数,新生代对象仍然存活,则会移动到老年代中

大对象直接分配在老年代中


Gc 分为 minor Gc, full Gc,即新生代 gc 和 老年代 gc。新生代 gc 比老年代 gc 频繁,速度也更快


用户头像

hdhdh

关注

还未添加个人签名 2018.01.23 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营标签”,便于分类~
2020 年 08 月 03 日 14:19
回复
没有更多了
第九周