JVM之GC垃圾回收机制
发布日期:2021-10-06 02:38:17 浏览次数:3 分类:技术文章

本文共 974 字,大约阅读时间需要 3 分钟。

GC发生在JVM那一部分?有几种GC?他们的算法是什么?

GC发生在JVM堆(Heap)里 

堆区:内存最大的一块,所有的对象实例都在这里分配内存

 

GC 是分代手机算法,不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。

  1. 次数上频繁收集Young区  MinorGC(存放所有新生成的对象)
  2. 次数上较少收集Old区  Full GC(在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象)
  3. 基本不动Perm区(用于存放静态文件,如Java类、方法等)

 

GC算法:

  • 引用计数法(JVM 的实现一般不采用此方式)

       应用:微软的COM/ActionScript3/Python......

       缺点:每次对对象复制时均需要维护引用计数器,而且计数器本身也有一定的消耗;

                  较难处理循环引用

 

  • 复制算法(Copying)

        年轻代中使用的Minor GC,就是才用的复制算法(Copying)

        原理:

                从根集合(GC Root)开始,通过Tracing从Form中找到存活对象,拷贝到To中;

                Form、To交换身份,下次内存从To开始

        优点:

                没有标记和清除的过程,效率高

                没有内存碎片,可以利用bump-the-pointer实现快速内存分配

        缺点:需要双倍空间

 

  • 标记清除(Mark-Sweep)

        老年代一般是由标记清除或者标记清除与标记整理的混合实现

        标记(Mark):从根集合开始扫描,对存活的对象进行标记。

        清除(Sweep):扫描整个内存空间,回收未被标记的对象,使用free-list记录可以区域

        优点:不需要额外空间

        缺点:

                两次扫描,耗时严重

                会产生内存碎片

               

  • 标记压缩(Mark-Compact)

        老年代一般是由标记清除或者标记清除与标记整理的混合实现

        标记(Mark):从根集合开始扫描,对存活的对象进行标记。

        压缩(Compact):再次扫描,并往一端滑动存活对象

        优点:没有内存碎片,可以利用bump-the-pointe

        缺点:需要移动对象的成本

 

  • 标记清除压缩(Mark-Sweep-Compact)

        原理:

                Mark-Sweep 和 Mark-Compact的结合

                和Mark-Sweep 一致,当进行多次GC后才Compact

        优点:减少移动对象的成本

 

 

转载地址:https://blog.csdn.net/luxuiary/article/details/105584347 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:什么是Redis?Redis在项目中的使用场景?
下一篇:怎么成为一个优秀的项目经理

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月14日 06时58分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java exec封装_Java 执行系统命令工具类(commons-exec) 2019-04-21
php sha512解密,PHP加密函数 sha256 sha512 sha256_file() sha512_file() 2019-04-21
php将文件夹打包zip文件,PHP把文件夹打包成ZIP文件 2019-04-21
mysql in 逗号分隔,使用MySQL IN()从逗号分隔的值中获取记录? 2019-04-21
php静态页面示例,php生成静态页面的简单示例_php实例 2019-04-21
迭代函数系统matlab实现,线性随机IFS迭代Matlab示例程序.doc 2019-04-21
w3wp ash oracle,[20200409]使用ash_wait_chains注意的一个细节.txt 2019-04-21
c语言程序设计教程谭浩强张基温,C语言程序设计教程(第2版) 2019-04-21
idea xml文件引入类提示_IDEA中导入多module的Maven项目后子项目不正常的情况 2019-04-21
太赫兹芯片是什么原理_什么是太赫兹技术?艾舒朗太赫兹理疗鞋——脑梗后遗症+便秘+久站腿疼腿肿案例... 2019-04-21
exfat默认配置大小_mac开发配置技巧 2019-04-21
三星k3梅林没有软件中心_10万出头买顶配,1.4T合资家轿起亚K3换新,还带换挡拨片... 2019-04-21
k8s边缘节点_边缘计算容器及K8S应用的三种场景及部署选项 2019-04-21
诸葛io的技术架构图_基于泳道技术生成“无数”个测试环境 2019-04-21
互相引用 spring_# 技术笔记:spring、springBoot源码解析 2019-04-21
华为发布岳云鹏手机_鸿蒙2.0正式发布:明年华为手机全面升级 2019-04-21
ifpc挖filecoin_Filecoin挖矿分析全套 不容错过的干货 2019-04-21
python扫雷 高级算法_Python玩转算法—扫雷 2019-04-21
牛客网python测试考试答案_牛客网SQL题库之考试分数 2019-04-21
git获取所有branch_使用jGit 通过gitUrl 获取Git的所有分支 2019-04-21