浅谈GC垃圾回收机制

首先,说一下为什么要进行GC垃圾回收
手机内存给每个因公分配的内存都是有限的,如果频繁创建对象,而没有对无用对象进行回收的话,就会造成OOM(内存溢出)
注,内存溢出解决办法请见https://www.jianshu.com/p/bb3d8cc41234

查找那些没用的对象

这个有两种算法
第一,引用计算法,当对象创建的时候给对象设置一个引用计算器,当对象被引用的时候就+1,取消应用的时候就-1,没有引用的时候就是0。那么这些没有引用的就是垃圾回收的目标。但是,如果两个没有引用的对象相互引用的话这个算法就没有办法查找到
第二,可达性算法,就是从对象的根节点进行查找,不可达的对象即为垃圾

对没用对象进行回收

有四种算法
第一,标记清除法,分为标记阶段和清除阶段,标记阶段就是对所有需要回收的对象进行标记,清除阶段就是对标记的对象进行清除
第二,复制清除法,使用的内存可以分为两块,一块为没有使用的,一块是使用的,首先将使用区域中的存货的对象复制到未使用的内存区域,然后两者角色互换。(用空间换时间)
第三,标记压缩法,标记过后不需要立即清除,将存活的对象压缩到一端,清除边缘地区(用时间换空间)
第四,分带算法,将新创建的对象放在年轻带区域,因为年轻带回收快,所以用复制清除算法(空间换时间),当经过几次回收后仍然存活得对象就存放在老年代区域,因为老年代回收慢,所以可以用标记压缩法(时间换空间)也可以用标记清除法

借我一束光照亮暗淡

借我笑颜灿烂如春天

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供...
    简欲明心阅读 90,109评论 17 311
  • 来自: Android梦想特工队作者: Aaron主页: http://www.wxtlife.com/原...
    技术特工队阅读 9,869评论 0 28
  • JVM内存区域 JVM将其管理的内存分为若干数据区域,这些数据区域分布情况如下图所示: 程序计数器:一块较小内存区...
    luoxn28阅读 3,982评论 0 0
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 11,208评论 2 31
  • 技术是复杂的,学习是开心的,不是一蹴而就,马上就能成功的。不要以为软硬技能兼备就能解决任何技术问题。Web 开发,...
    jiri阅读 3,369评论 1 0