【Android面试-Java-V05】Java GC 垃圾回收

  • 引用计数器算法

引用计数器的算法原理:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就会加1;当引用失效时,计数器就会减1;在任何时刻计数器的值为0的对象就是不可能再被使用的,也就是被回收的对象。

优点:效率高 缺陷:无法解决对象之间循环引用的问题,对于循环引用的对象,无法进行回收(主流JVM并未采用这种算法)

  • 可达性分析算法(GC Roots)

在主流的JVM实现中,都是通过可达性分析算法来判断对象时候存活的。其基本思想:通过一系列被称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots对象没有任何引用链相连,就认为GC Roots到这个对象是不可达的,判定为不可用对象,可以被回收。

Java虚拟机将以下对象定义为 ==GC Roots== :

  • Java虚拟机栈中引用的对象,虚拟机栈中(栈帧)
  • 静态属性引用的对象,static对象
  • 常量引用的对象,final对象
  • 本地方法栈中引用的对象,nio
【Android面试-Java-V05】Java GC 垃圾回收

2.垃圾收集算法

  • 标记清除算法

从根集合进行扫描,对存活的对象进行标记,完毕后清除未标记对象

  • 复制算法

将内存一分为二,每次使用一块,将存活的对象复制到另外一块。

时间上效率低,空间上产生内存碎片。

  • 标记压缩算法

类似于标记清除,移动存活的对象向内存一端,然后清理边界以外的内存。

  • 分代收集算法

不同的对象的生命周期(存活情况)是不一样的,而不同生命周期的对象位于堆中不同的区域,因此对堆内存不同区域采用不同的策略进行回收可以提高 JVM 的执行效率。

当代商用虚拟机使用的都是分代收集算法:

原文 

https://juejin.im/post/5e89a226f265da47e22f13f4

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 【Android面试-Java-V05】Java GC 垃圾回收

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址