对象已死吗
在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。
前言
一本好书,每读一遍都会有不同的感受。写读书笔记,一来是便于平时查阅,毕竟技术书籍都比较厚,不方便随时携带;二来是督促自己多读书,理论与实践结合才能不断提升自己。
【深入理解Java虚拟机】阅读笔记: 3.2 对象已死吗
引用计数法
- 实现简单,判定效率高
- 很难解决对象之间相互循环引用的问题
- 主流的 Java 虚拟机未采用
引用计数算法的缺陷
1 | /** |
可达性分析算法
主流的商用程序语言的主流实现中使用可达性分析 (Reachability Analysis) 来判定对象是否存活
Java 可作为 GC Roots 的对象
- 虚拟机栈 (栈帧中的本地变量表) 中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中 JNI (Native方法) 引用的对象
Java 引用
- 强引用 (Strong Reference)。类似 “Object obj = new Object()” 的引用。垃圾收集器不回收强引用的对象
- 软引用 (Soft Reference)。使用 SoftReference 类来实现软引用。在系统将要发生内存溢出异常之前对这些对象进行回收
- 弱引用 (Weak Reference)。使用 WeakReference 类来实现弱引用。在下一次垃圾收集时,无论内存是否足够都会回收这部分对象
- 虚引用 (Phantom Reference)。使用 PhantomReference 类来实现虚引用。无法通过虚引用获取对象实例。不影响对象生存时间
参考
周志明. 深入理解Java虚拟机
相关文章
- 2017-10-20
主要介绍常见垃圾收集算法的思想。
- 2020-04-15
dubbo 是一个流行的 RPC 框架,它提供了一个
@Reference
注解,用于配置依赖的远程接口,完成代理类的自动注入。本文主要关注@Reference
注解的实现原理。 - 2017-10-21
垃圾回收算法在 HotSpot 虚拟机上的实现。
- 2017-10-16
在 Java 虚拟机规范的描述中,除了程序计数器外,虚拟机的其他几个运行时区域都有发生 OutOfMemoryError 异常的可能。
- 2017-10-22
Java 内存自动管理可归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。