Java虚拟机(JVM) 03 java对象的回收 which object is the garbage?算法

Java对象信息是存储在Java堆中的,如果不进行对堆中不需要的对象内存进行回收,就是发生堆内存溢出OutOfMemory错误,影响程序运行。所以需要对Java堆中的对象进行识别,什么对象是Garbage。

which object is the garbage?

这里需要提到Java中的引用,英文是reference。引用(Reference)数据中存储内存地址,程序用到引用的时候,根据其中的数据找到相关的内存,实现访问。引用(Reference)这种数据类型是存储在栈中的局部变量表中的。


标志计数法:
对象中增加一个计算引用次数的区域,程序每引用一次对象就加1(+1),对象的引用失效时就减1(-1)。当对象中的计数为0时候,这个对象就是garbage了。
在这里插入图片描述

RC不能解决的是什么?外部没有引用,内部存在引用,这个时候引用存在,但是这个例子中的三个就是垃圾

在这里插入图片描述
可达性法:
跟图中的邻接单链表很像,也是形成类是于链表。开始节点叫做GC Root ,从这个节点找他是否引用了其他对象,最后形成一个图。对于这个图中的不可到达节点(不一定是单个节点,也可能是不能到达的其他子图),这些节点代表的对象就是garbage了。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值