对象是否死亡的2中判定方法:引用计数和可达性分析(又称引用链)

1.引用计数

对象再被创建时,对象头里会存储引用计数器,对象被引用,计数器+1;引用失效,计数器 -1;GC时会回收计数器为0的对象。但是JVM没有用这种方式,因为无法判定相互循环引用(A引用B,B引用A)的情况,无法解决对象互相循环引用。

2.引用链

程序把所有的引用看作图(类似树结构的图),选定一个对象作为GC Root根节点,从该节点开始寻找对应的引用节点并标记,找到这个节点之后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点认为是不可达的无用节点,会被回收。

可以作为GC Root根节点的对象有:

a.虚拟机栈中的引用对象(本地变量表)

b,方法区类静态属性的引用对象

c,方法区常量引用的对象

d,本地方法栈中的引用对象

Java中存在的4种引用类型:

a 强引用

是指创建一个对象并把这个对象赋给一个引用变量 类似 string s="hello",只要引用存在,GC永远不会回收

b 软引用

非必需引用,内存不足时回收。软引用主要用于用户实现类似缓存的功能,在没有被回收前可以直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真实的来源查询这些数据。

c 弱引用

描述非必需对象。被弱引用关联的对象只能生存到下一次垃圾回收之前,垃圾收集器工作之后,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。弱引用主要用于监控对象是否已经被标记为即将回收的垃圾,可以通过弱引用的isEnQueues方法返回对象是否被垃圾回收器标记。

d 虚引用

虚引用是每次垃圾回收的时候都会被回收,唯一作用当对象被回收时,可以收到通知。

最新文章

  1. MyBatis使用总结+整合Spring
  2. 使用LVM对硬盘在线扩容
  3. ReferentialConstraint 中的依赖属性映射到由存储生成的列
  4. 15.含有指针成员的类的拷贝[ClassCopyConstructorWithPointerMember]
  5. JQuery知识快览之三—JQuery对象集
  6. Codeforces Round #137 (Div. 2)
  7. HDU 1422 重温世界杯
  8. Hadoop2的简单安装
  9. <Chapter 2>2-2-2.开发Python应用(Developing a Python App)
  10. 和阿文一起学H5--如何把H5压缩到最小
  11. 我的Jekyll博客
  12. linux input如何固定设备event handler
  13. oracle----sqlldr用法(转)
  14. (简单) POJ 1278 Catch That Cow,回溯。
  15. Salesforce删除数据时出现Insufficient privileges的可能原因
  16. SDP(6):分布式数据库运算环境- Cassandra-Engine
  17. R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)
  18. POJ-2184 Cow Exhibition---01背包变形(负数偏移)
  19. DNS服务器 和CDN
  20. 10_ for 练习 _ is Prime Number ?

热门文章

  1. ZYNQ工程PL顶层创建block module报错解决
  2. day14-python之集合函数字符串格式化
  3. springboot学习入门简易版三---springboot2.0启动方式
  4. kubernetes 资源清单定义入门
  5. Vue父组件向子组件传递方法(自定义方法)并且子组件向父组件传递数据
  6. 安装配置nginx之后访问不了nginx的问题
  7. C++——重载原理分析
  8. SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
  9. 新一代纳秒级高带宽仿真工具平台——HAC Express
  10. IDEA实用教程(五)——配置IDEA的JVM内存值