3.2 对象已死吗

1.引用计数法

  • 引用计数在cocos2dx里已经比较熟悉了,要注意的一个点就是循环引用的问题,如果有两个对象相互持有对方的引用,但是已经没有其他对象持有这两个对象的引用,那么就会出现这两个引用的引用计数分别不为0,但是其实实际上已经无法被外部引用了,就是已经死亡了。

2.可达性分析算法

  • 所谓可达性分析算法,就是通过一直存在的对象为起点(GC Root),去搜索堆里的对象,如果能搜索的到,说明这个对象就是有用的,活着的,如果搜索不到,那就说明这些对象就已经死了,这样的算法就能解决引用计数法的循环引用的问题。
  • 可以作为GC Root的有
    1.虚拟机栈中引用的对象
    2.本地方法栈中引用的对象
    3.方法区中的类静态属性引用的对象
    4.方法区中常量引用的对象

3.引用的类型

  • 强引用:有效的引用的,永远不会被回收;
  • 软引用:只有在没办法的时候,才会去回收的引用;
  • 弱引用:只要GC来回收了,就要被回收;
  • 虚引用:没用的引用,不来管了;

4.方法区的回收

  • 方法区的回收有两部分:废弃常量和无用的类
  • 一个常量没用引用任何对象,则回收
  • 无用的类的判定:
    1.该类的所有实例都已经被回收,堆中已经没有这个类的任何对象;
    2.加载该类的ClassLoader被回收;
    3.该类的Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法;
  • 在大量使用反射,动态代理,CGLib等ByteCode框架,动态生成JSP,以及OSGi这类自定义ClassLoader的场景都需要虚拟机具备类卸载的功能,防止方法区溢出;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 3.2.1引用计数算法 概念:给对象中添加一个引用计数器,每当有 一个地方引用它时,计数器值就加1;当引用失效时,...
    MoscowAug阅读 2,890评论 0 0
  • 一 、java虚拟机底层结构详解 我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、...
    葡萄喃喃呓语阅读 5,405评论 0 4
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 11,238评论 2 31
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,973评论 3 83
  • 距离 是你站在那里 我站在这里 彼此守望 不会孤独 把距离写成一首温暖的诗 看一朵花开 即便有一天花会凋谢 也不会...
    韩倾阅读 1,288评论 0 1

友情链接更多精彩内容