判断对象是否是垃圾的引用计数法有什么问题

给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加一,当引用失效计数器就减一,任何时候引用计数器为0的对象就是不可能再被使用的(变成垃圾)。

这个方法实现简单、效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,其最主要的原因就是它很难解决对象之间相互循环引用的问题,所谓对象之间的相互引用问题,如下面代码所示:除了对象objA 和objB相互引用这对方之外,这两个对象再无任何引用,但是他们因为相互引用对方,导致他们的引用计数器都不为0,于是引用计数算法无法通知GC回收器回收他们。

java 复制代码
/**
 * 如果引用计数器会导致对象无法被回收的问题
 */
package com.bxp.jvmtest.test01;

public class CounterPloblemTest {
    public static void main(String[] args) {
        User objA = new User();
        User objB = new User();
        objA.setUser(objB);
        objB.setUser(objA);
        objA = null;
        objB = null;
    }

    public static class User {
        private String name;
        private Integer age;
        private User user;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        public User getUser() {
            return user;
        }

        public void setUser(User user) {
            this.user = user;
        }
    }
}
相关推荐
LUCIAZZZ15 分钟前
简单说一下什么是RPC
java·网络·网络协议·计算机网络·spring cloud·rpc
嘵奇18 分钟前
最新版IDEA下载安装教程
java·intellij-idea
s_fox_43 分钟前
Nginx Embedded Variables 嵌入式变量解析(4)
java·网络·nginx
Jelena157795857921 小时前
使用Java爬虫获取1688 item_get_company 接口的公司档案信息
java·开发语言·爬虫
数据小小爬虫1 小时前
Jsoup解析商品详情时,如何确保数据准确性?
java·爬虫
V+zmm101341 小时前
自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
坚定信念,勇往无前1 小时前
springboot单机支持1w并发,需要做哪些优化
java·spring boot·后端
丁总学Java1 小时前
`AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格
java
m0_748240252 小时前
SpringMVC详解
java
剑走偏锋o.O3 小时前
Java四大框架深度剖析:MyBatis、Spring、SpringMVC与SpringBoot
java·spring boot·spring·mybatis