千家信息网

JVM垃圾收集器算法是什么

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,小编给大家分享一下JVM垃圾收集器算法是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.垃圾收集器算法垃圾收集器用于
千家信息网最后更新 2024年09月21日JVM垃圾收集器算法是什么

小编给大家分享一下JVM垃圾收集器算法是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.垃圾收集器算法

垃圾收集器用于清除垃圾的算法有:标记-清除算法、复制算法、标记-整理算法。

用于针对对象不同的存活周期而分代的算法有:分代收集算法。这个算法把Java堆分为新生代和老年代。

1.1 标记-清除算法(Mark-Sweep)

标记-清除算法应该是最符合我们人一开始处理垃圾的思路的算法,例如我们想清除房间的垃圾,我们肯定是先定位(对应标记)哪些是垃圾,然后把这些垃圾之后扔了(对应清除),简单粗暴,剩下的不是垃圾的东西我也懒得理,不管了哈哈哈。

当然有的人说我打扫房间会先整理不是垃圾的东西然后把垃圾扔了...你走错片场了请去标记-整理片场(勤劳的孩子)。

这算法有两个缺点

1.标记和清除的效率不高,按这种思路是一个一个标记过去,并且扫描哪些是标记过得然后才清除了

2.空间碎片问题,看上图整理后中间空了好多,这样会使得比较大的对象要申请比较多的连续空间的时候申请不到,明明你空间还很足的。然后导致又一次GC。

1.2 复制算法

复制算法等于说根据标记-清除算法的不足之处进行了改进。简单的来说它把空间切成了两半,一次我就用一半,一半满了我就把活着的对象放在另一半按顺序放,然后无脑的把刚才使用的那一半空间一次清理干净,然后保留着存活的那些对象的内存空间换上去使用。这样就没了标记-清除算法的空间碎片问题。

虚拟机基本上用这种算法来回收新生代,但是切一半空间利用率太低了,一次就只能用一半。所以在HotSpot中是把这一块空间分为3块,一块Eden,两块Survivor。

因为正常情况下新生代的大部分对象都是短命鬼,所以能活下来的不多,所以默认的空间划分比例是8:1:1。用法就是每次只使用Eden和一块Survivor,然后把活下来的对象都扔到另一块Survivor。再清理Eden和之前的那块Survivor。

然后再把Eden和存放存活对象的那一块Survivor用来迎接新的对象。就等于每次回收了之后都会对调一下两个Survivor。

但是事情总有意外,万一这波对象短命鬼较少,存活下来的很多,那一个Survivor放不下,所以还有个担保机制,就像我们现实生活中的担保人,你还不起了担保人上!这个担保人就是老年代,也就是Survivor放不下了就放老年代去。

那为什么虚拟机基本上用这种算法来回收新生代呢?就是因为新生代的对象大部分存活时间不长,所以每次GC的时候复制的比较少,效率高啊,每次就复制一点点对象到Survivor。

那要是到老年代也就是一些老不死的对象那用复制效率就低了啊,首先8:1:1这种分法就不合适了,因为每次存活下来的对象会很多,1就放不下了,你可能就得"五五开"分了,那"五五开"之分也就算了,因为每次对象基本上都活着,所以每次复制等于复制一半空间的对象。效率低啊。

还有,新生代有老年代做担保啊,多了的对象可以放到老年代,而老年代不行啊,没有依靠了。所以就又有了下面的算法。

1.3 标记-整理算法(Mark-Compact)

标记-整理算法的思路也是和标记-清除算法一样,先标记那些需要清除的对象,但是后续步骤不一样,它是整理,对就是像上面说的那些清除房间垃圾每次都会整理的人一样那么勤劳。

每次会移动所有存活的对象,且按照内存地址次序依次排列,也就是把活着的对象都像一端移动,然后将末端内存地址以后的内存全部回收。所以用了它也就没有空间碎片的问题了。

1.4 分代收集算法

这算法就是把Java堆分为新生代和老年代,这样好根据每个代的对象存活时间特点上不同的收集算法。

所以一般新老代就是用复制算法。老年代用标记-清除或标记-整理算法。


以上是"JVM垃圾收集器算法是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

算法 对象 标记 垃圾 空间 年代 新生 新生代 就是 担保 收集器 内存 效率 也就是 大部分 思路 房间 担保人 碎片 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 忻州商场触摸互动软件开发公司 服务器什么时候维修比较短 数据库中关系运算视频 软件开发人员的行业分析 苹果下载东西找不到服务器 北京服务器运维服务云主机 数据库创建存储过程在哪里看 海城市热电厂自动化控制软件开发 软件开发BD回归分析 非关系数据库详解 e盾服务器端 工业信息证 网络安全 ebs软件开发工程师技能 山东济南国尚网络技术有限公司 上海忠客软件开发中心 一台服务器放多个网站 山东济宁网络安全审计 安徽手机软件开发培训 rose需要两台服务器参数一直 单片机软件开发介绍 有关网络安全的讲座 安卓代理服务器设置 店联北京网络技术 脱离加密服务器文件不能打开 德阳胶衣网络技术 服务器添加网卡风扇变大 网络安全模拟训练室建造 58同城的服务器异常啥意思 神州新桥数据库审计默认账户 网络安全等级红色
0