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

给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加一,当引用失效计数器就减一,任何时候引用计数器为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;
        }
    }
}
相关推荐
用户2986985301415 分钟前
Java 实现 Word 文档内容复制:段落、章节与全文合并技巧
java·后端
吴声子夜歌19 分钟前
JVM——原子操作类实现原理
jvm·原子操作类
摇滚侠19 分钟前
Maven 入门+高深 SSM 案例 111-112
java·数据库·maven
Chase_______23 分钟前
【Java基础 | 16】集合框架(下):Map、HashMap 与 TreeMap
java·windows
Aaswk31 分钟前
Java项目:文件批量处理工具
java·开发语言·vscode·idea
小江的记录本35 分钟前
【Spring全家桶】Spring AI核心原理、大模型集成、Prompt工程、RAG实现、AI Agent开发(附《思维导图》+《面试高频考点清单》)
java·人工智能·spring boot·后端·spring·面试·prompt
plainGeekDev39 分钟前
线程安全集合 → 协程安全替代
android·java·kotlin
手握风云-1 小时前
Spring AI:让大模型住进 Spring 生态(五)
java·后端·spring
plainGeekDev1 小时前
Timer → Coroutines
android·java·kotlin
糖果店的幽灵1 小时前
Spring AI 从入门到精通-Spring AI 是什么
java·人工智能·spring