Java中gcRoot和引用类型
JAVA 类型 引用
2023-09-11 14:18:08 时间
看到一个老问题,Java是如何判定回收哪些对象的?
答:从gcRoot根搜索不可达,且标记清理一次之后仍没有被复活的对象,会被认定为垃圾对象进行清理。注意在Java中没有对象的作用域,只有对象的引用的作用域。Java垃圾回收没有采用引用计数算法,因为它不好解决循环引用问题。Java垃圾算法实际上是标记出那些对象是被引用在用的,其它没被标记的就是没用的可以回收,而不是直接找出哪些对象是没用的。
那么,哪些对象可以作为gcRoot呢?
它其实是一组根引用,主要包括虚拟机栈中的局部变量表(实际就是所有正在被调用的方法等参数局部变量等),类的静态属性引用,常量对象引用,本地方法栈中对象引用。实际上Java垃圾回收主要是针对堆内存的,这些引用则来自于JVM运行时数据区的其它几部分:虚拟机栈,本地方法区,方法区。
Java中引用类型包含哪几类,有什么用?
最常用到的是强引用,只有这种引用存在,垃圾回收时就不会清理它指向的对象。其次是软引用,只有在垃圾回收内存空间不足时才会回收这类引用指向的对象,多用在缓存对象中。再其次是弱引用,只要发生垃圾回收就会被回收。最后是虚引用,是引用关系最弱的一种。
相关文章
- [Java基础] java的守护线程与非守护线程
- MySQL_(Java)【连接池】简单在JDBCUtils.java中创建连接池
- Java Statement和PreparedStatement性能测试(转)
- JAVA 【引用类型】和【对象类型】在【继承】中的异同
- Java实现 LeetCode 26 删除排序数组中的重复项
- java实现第六届蓝桥杯空心菱形
- Java实现表达式计算求值
- Java实现 蓝桥杯VIP 算法训练 数的划分
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- Java 泛型,你了解类型擦除吗?(转)
- 【JAVA】java中char类型数组用数组名打印结果不是地址值而是数组内容
- 【JAVA】 02-Java对象细节
- 【JAVA】java中char类型数组用数组名打印结果不是地址值而是数组内容
- 【JAVA】java中split以"." 、""、“|”分隔字符串
- 【JAVA】java编译错误:编码UTF8/GBK的不可映射字符
- Java中throws和throw的区别讲解
- 在Java中可以使用自定义的java.net.InetAddress实现来解决虚拟hosts的问题
- Java,JavaScript和ABAP通过代码取得当前代码的调用栈Callstack
- Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
- java字符串练习题4、统计一行字符串中所有的字符类型数量
- 【java】Java中-> 是什么意思?
- java常用中间件处理数据交互、连接数据分离之后两个系统间的通信
- 【java】Java ArrayList
- Java中double类型精度丢失的问题_double类型数据加减操作精度丢失解决方法_BigDecimal取整
- Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释
- Java并发编程原理: 线程之间的互斥与协作机制
- java基础讲解(一): java基本数据类型和引用类型 byte,short,int,long,float,double,char,boolean占多少字节 ++i和i++ strictf保留字
- 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )
- Java Swing界面编程(28)---复选框:JCheckBox
- java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】
- Linux系统之安装java开发环境
- 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
- Java序列化详解
- 【java】Java并发编程系列- volatile关键字(高并发中特实用哦)
- 【java】Java 内存模型