`

Java中对象的六种可触及状态

阅读更多
1. 强可触及
   垃圾收集器不会回收强可触及对象占据的空间。
2. 软可触及(SoftReference)
   垃圾收集器可能回收软可触及对象的内存。如果发生了,它会清除这些软可触及对象的软引用。当垃圾收集器清除了一个和引用队列有关联的软引用对象时,它把该软引用对象加入队列。
   SoftReference可以用来创建内存中缓存,JVM的实现需要在抛出OutOfMemoryError之前清除软引用,但在其他的情况下可以选择清理的时间或者是否清除它们。
3. 弱可触及 (WeakReference)
   垃圾收集器必须归还弱可触及对象所占据的内存。
   WeakReference 可以用来创建规范映射,比如哈希表,它的关键字在没有其他程序部分的引用时可以从映射中清除。java.util.WeakHashMap就用弱引用提供了这样的规范映射。
4. 可复活的
   对象既不是强可触及、软可触及,也不是弱可触及,但是仍然可能通过执行某些终结(finalizer)方法复活到这几种状态之一。
5. 影子可触及
   垃圾收集器不会清除一个影子引用,所有的影子引用都必须由程序明确的清除。
   调用影子对象的get()方法只能得到null。
6. 不可触及
   不可触及对象已经准备好回收了。
分享到:
评论

相关推荐

    Java面向对象的思维方法

    面向对象的编程思维是Java等现代编程语言的核心思想,它强调将现实世界中的事物抽象为对象,通过对象之间的交互来实现程序的功能。在Java中,面向对象编程(OOP)包含三大特性:封装、继承和多态。 1. 封装:封装是...

    Java对象的强、软、弱和虚引用

    也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“heap of fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12.4 压缩堆 9.13 随书光盘 9.14 资源页 ...

    JAVA上百实例源码以及开源项目源代码

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    第2章(类与对象的基本概念).ppt

    当我们创建一个类的对象时,实际上是根据类的定义在内存中分配空间并初始化对象的状态。对象可以通过其方法来改变状态或执行行为。 总结起来,面向对象编程的四大特性——抽象、封装、继承和多态,共同构成了Java等...

    深入Java虚拟机

    9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12.4 压缩堆 9.13 随书光盘 9.14 资源页 ...

    JAVA面试题附答案

    以下是从给定的文件标题、描述、标签及部分内容中提取的关键知识点,它们不仅覆盖了JAVA的基础,还触及了高级特性,如面向对象编程、字符串处理、异常管理、集合类、Servlet与EJB等。 ### 一、面向对象编程的四大...

    Java Unsafe类1

    总的来说,`Unsafe`类提供了一种强大的手段来触及Java的底层机制,但它也带来了潜在的风险,因为直接操作内存和线程状态可能导致数据一致性问题和并发错误。在实际开发中,除非有特殊需求,否则通常应优先选择Java...

    Java岗位常规面试题.pdf

    - **不可变对象**: 创建不可变对象,确保对象状态不变。 **示例**: ```java public class ThreadSafeExample { private int count = 0; public synchronized void increment() { count++; } public ...

    深入java虚拟机第二版

    9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12.4 压缩堆 9.13 随书光盘 9.14 资源页 第10章 栈...

    深入理解Java垃圾回收机制以及内存泄漏

    Java中的对象存在三种状态:可触及状态、可复活状态和不可触及状态。当对象被创建并被至少一个引用指向时,它处于可触及状态。如果所有引用都被移除,对象进入可复活状态。在这一状态下,垃圾回收器可能会调用对象的...

    深入JAVA虚拟机(第2版)

    9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12.4 压缩堆 9.13 随书光盘 9.14 资源页 ...

    JAVA核心面试知识整理(全).rar

    - 对象引用的四种状态:可达、可触及、可复活、不可达。 - 垃圾回收机制:如何判断对象是否可回收,以及GC算法。 7. **IO流** - 流的概念:数据的输入输出模型。 - 文件操作:读写文件,文件复制。 - 字节流与...

    Java夜未眠.程序员的心声

    书中的Java知识点可能涵盖基础语法、面向对象设计原则、异常处理、集合框架、多线程编程、网络编程以及JVM内部机制等。作者可能通过具体的案例和实践,帮助读者理解如何编写出高效、可维护的Java代码。 其次,书中...

    JAVA高级知识,JVM篇

    - Java虚拟机栈中引用的对象。 - 本地方法栈中JNI(Native方法)引用的对象。 - 方法区中类静态属性引用的对象。 - 方法区中常量引用的对象。 ##### 2. 常见的垃圾回收算法 - **标记-清除算法**: - **优点**:...

    Java网上商城论文

    此外,开发技术选用了JSP(Java Server Pages),这是一种动态网页技术,能够与后端Java代码紧密结合,实现数据的动态展示和处理。 系统分为前台和后台两大部分。前台主要是用户界面,包括用户注册、购物车管理、...

    Java garbage minibook

    - **可达性分析算法**:通过一系列名为“GC Roots”的对象作为起点,跟踪所有从这些根对象可达的对象,未被触及的对象即被认为是垃圾。 - **引用计数算法**:简单而直观,但难以处理循环引用的问题。 - **分代假设**...

Global site tag (gtag.js) - Google Analytics