博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GC垃圾回收机制
阅读量:6952 次
发布时间:2019-06-27

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

hot3.png

GC垃圾回收机制就是对无用的对象进行回收从而释放内存

通过俩种算法去判断是否需要去回收

  1. 引用计数法

        引用计数法很简单,但是存在问题,因而java并不采用这种方式进行对象存活判断。

        引用计数法的逻辑是:在堆中存储对象时,在对象头处会有一个计数器,如果一个对象增加了一个引用与之相连,则次数加一,如果一个引用关系失效则次数减一。如果一个对象的次数变为0,则说明这个对象已经不适用,不处于存活状态

        最大问题就是:

        如果一个对象A持有对象B,对象B也持有对象A,那么gc永远无法回收这俩个对象

             

      2.可达性分析法

        这个算法的基本思路就是通过一系列名为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象时不可用的

        a3faaa85724c6bbe037c82918cfff187ffa.jpg

        由图可知,obj8,obj9,obj10都没有到GCRoots对象的引用链,即便obj9和obj10之间有引用链,他们还是会被当成垃圾处理,可以进行回收

 

        一般来说,以下情况的对象可以作为GC Roots:

  • 虚拟栈(栈桢中的本地变量表)中的引用对象
  • 方法区中的类静态属性引用的对象
  • 方法区中的常量引用的对象
  • 本地方法栈中JNI(Native方法)的引用的对象

转载于:https://my.oschina.net/u/3705875/blog/1843863

你可能感兴趣的文章
C语言基础(一)
查看>>
python处理xml中非法字符的一种思路
查看>>
itextSharp 附pdf文件解析
查看>>
solr6.0.0 + tomcat8 配置问题
查看>>
[leetcode-303-Range Sum Query - Immutable]
查看>>
LinkButton(按钮)
查看>>
leetcode Largest Rectangle in Histogram 单调栈
查看>>
Word Break II
查看>>
驱动lx4f120h,头文件配置,没有完全吃透,望指点
查看>>
caffe linux下面的调试mnist遇到的问题
查看>>
IOS的Application以及IOS目录的介绍
查看>>
SDN第六次上机作业
查看>>
虚拟Linux系统使用Windows系统oracle数据库
查看>>
javascript之奇淫技巧
查看>>
python 使用函数参数注解
查看>>
Redis五大数据类型以及操作---散列表
查看>>
重载类型转换操作符(overload conversion operator)
查看>>
bootstrap学习(二)页面
查看>>
C++ sizeof操作符的用法和strlen函数的区别
查看>>
文件的续写
查看>>