首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

学习笔记:jvm垃圾回收搜集算法

上次整理到判断哪些对象是垃圾的算法,有引用计数法和跟可达算法。今晚整理一下这些对象成为垃圾后,回收搜集的算法有哪些。

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

标记-清除算法分为标记和清除2个阶段。⾸先标记出所有需要回收的对象,在标记完成后统⼀回收掉所有被标记的对象。因为标记和清除都需要便利整个堆中的对象,所以两个过程效率都不高,又因为是直接清除,没有清理,所以会产生大量不连续的内存片段,容易提前触发gc

复制回收算法(Copying)

将可⽤内存按容量划分为相等的两块,每次只使⽤其中的⼀块。当这⼀块的内存⽤完了,就将还存活着的对象复制到另外⼀块上⾯,然后再把已使⽤过的内存空间⼀次清理掉。这种不会产品内存片段。

现在商业虚拟机都是采⽤这种收集算法来回收新⽣代,当回收时,将Eden和Survivor中还存活着的对象拷⻉到另外⼀块Survivor空间上,最后清理掉Eden和刚才⽤过的Survivor的空间。

HotSpot虚拟机默认Eden和Survivor的⼤⼩⽐例是8:1,也就是每次新⽣代中可⽤内存空间为整个新⽣代容量的90%(80%+10%),只有10%的内存是会被“浪费”的。当Survivor空间不够⽤时,需要依赖其他内存(这⾥指⽼年代)进⾏分配担保(Handle Promotion)。

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

可以⽤标记-整理算法,标记过程仍然与“标记-清除”算法⼀样,然后让所有存活的对象都向⼀端移动,然后直接清理掉边界以外的内存。由于这种算法最后清理掉边界以外的内存,所以不会产品内存碎片。

分代回收算法(Generational Collection)

根据对象的存活周期的不同将内存划分为⼏块。

新⽣代,每次垃圾回收都有⼤量对象失去,选择复制算法。

⽼年代,对象存活率⾼,⽆⼈进⾏分配担保,就必须采⽤标记清除或者标记整理算法

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201109A0I1WL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券