如何判断对象可以被回收

本文介绍了Java中的垃圾回收算法,包括引用计数法和可达性分析。引用计数法存在对象互相引用导致计数无法归零的问题,而可达性分析通过确定根对象来决定哪些对象可以被回收,如系统类、常量、静态变量等。此外,还提到了使用jmap和MAT进行内存分析的方法。
摘要由CSDN通过智能技术生成

如何判断对象可以回收
    引用计数法:    定义一个计数器,记录变量当前被引用的数量,当数为0时即不被引用时,就回收
        缺点:    如:对象互相引用会导致计算器不能归零

        (java现在使用的垃圾回收算法)
    可达性分析算法:    先统一扫描,确定一系列根对象,(根对象:一定不能被垃圾回收的对象)
            如果一个对象没有被根对象  直接或者间接  的使用,就会被垃圾回收

        哪些对象可以作为根对象?
            分析方式:
                可以用  jmap 和内存分析工具Memory Analyzer(MAT)来分析
            
                jmap -dump:format=b,live,file=1.bin 线程id
                用jmap将当前线程信息抓取个快照,变成文件1.bin,然后用MAT分析


            根对象:    System.class    核心类加载器等系统类
                    :Object,String,HashMap等类
                Native Stack    本地方法类
                    :计算机底层的一些操作系统方法,可能是用c,cpp写的
                Busy Monitor    正在加锁的对象

                Thread:        正在活动的线程中使用的对象

    
    简单讲,被常量、静态变量、全局变量、运行时方法中的变量直接引用的对象,原则上不能被GC释放。
                

                            
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值