首页 > 编程语言 >java 如何判断对象是否是垃圾

java 如何判断对象是否是垃圾

时间:2023-04-14 13:44:23浏览次数:34  
标签:java 对象 是否是 计数器 GC 引用 线程 垃圾

引用计数法

给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象就是垃圾可被回收

比如 a 线程中某个栈帧使用某个对象,这个对象的引用计数器+1,调用结束,引用计数器-1

这个方法实现简单,效率高,但是并不可取,当循环引用时,引用计数器永远不会是0,就造成了内存泄漏

可达性分析算法

通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是存活的,不可达的对象就是垃圾可被回收

可以作为 GC Root 的对象如下

  • 虚拟机栈中引用的对象
  • 本地方法栈中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中的常量引用的对象

比如 a 线线程中栈帧1用了对象a,而对象a引用了对象b,a 就作为 GC Root,当线程存活时,b 对象就不会被回收>

标签:java,对象,是否是,计数器,GC,引用,线程,垃圾
From: https://www.cnblogs.com/hangychn/p/17318054.html

相关文章

  • android:keytool生成应用签名证书(java 15)
    一,查看是否已安装keytoolkeytool命令的程序位于jdk的安装目录/bin下,1,查看是否有keytool命令已安装?[lhdop@blog~]$ls/usr/local/soft/jdk-17/bin/keytool/usr/local/soft/jdk-17/bin/keytool2,查看帮助:列出可用的命令[lhdop@blog~]$keytool--helpKeyandCert......
  • 在 Java 中重采样音频
    在我的一个项目中,我需要将PCM音频数据重新采样为不同的采样率。我正在使用javax.sound.sampled.AudioSystem来完成这项任务。重新采样似乎会在帧的开头和结尾添加额外的样本。下面是一个最小的工作示例......
  • Java SpringBoot 中,动态执行 bean 对象中的方法
    根据不同的条件,调用不同的bean对象,执行对象中的方法SpringUtils工具类packagecom.vipsoft.web.utils;importcn.hutool.core.util.ArrayUtil;importorg.springframework.aop.framework.AopContext;importorg.springframework.beans.BeansException;importorg.sprin......
  • 原型及原型链-JavaScript教程
    JavaScript是世界上最流行的脚本语言。JavaScript是属于web的语言,它适用于PC、笔记本电脑、平板电脑和移动电话。JavaScript被设计为向HTML页面增加交互性。许多HTML开发者都不是程序员,但是JavaScript却拥有非常简单的语法。几乎每个人都有能力将小的JavaScript......
  • Java基础--数据结构
    数据结构Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)、哈希表(Hashtable)、属性(Properties)以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection)Java......
  • Java: Random
     /***版权所有2023涂聚文有限公司*许可信息查看:*描述:*用100元买100只鸡,大公鸡5元一只,母鸡3元1只,小鸡一元3只,问各能买多少只?*历史版本:JDK8.01*2023-03-12创建者geovindu*2023-03-12添加Lambda*2023-03-12修改:date*接口类*2023-03-12修改......
  • Java_JSTL_extend function tags
    1.createthefunctionclasspackagecn.com.benyoyo.manage.core.common.tools;publicclassElExFuncs{publicstaticintlastIndexOf(Stringtext,StringsearchString){if(text==null)text="";if(searchString==null)searchString="&q......
  • Java_JVM的内存溢出异常
     JVM的内存溢出异常在Java虚拟机规范的描述中,除了PC(程序计数器)寄存器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError异常的可能。当发生OutOfMemoryError异常时,无法用try...catch捕捉。 在开始讲解之前,在这里先简单介绍下虚拟机启动相关的一些内存设置参数。因为Ou......
  • Java_Double&BigDecimal
    importjava.math.BigDecimal;importjava.math.MathContext;publicclassBigDecimalTest{/***@paramargs*@referencearchie2010*@function实现将double类型的值转换为BigDecimal类型的值的不同途径以及各途径间的区别*......
  • Java_获取变量的类型
    如果是对象,那么可以使用getClass().getName()方法获得该对象的类名,然,还有就是利用反射机制获取原数据类型的,这个时候如果需要确定类型, 同样的,反射机制返回值是对象,比如对于类属性的返回,是Field对象,可以 通过里面的getType().getName()获得该属性的类型名称,下面一个例子:Type ......