`

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对象的生命周期详解 Java对象的生命周期是一个关键概念,涉及到对象从创建到销毁的整个过程。理解这一过程对于高效地编写和管理Java程序至关重要。 #### 创建对象的方式 对象的创建是生命周期的起点,...

    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 资源页 ...

    第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高级知识,JVM篇

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

    Java网上商城论文

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

    Java garbage minibook

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

    java面试题的几个区别

    由于对象在堆上分配,因此可以被多个线程共享,这使得堆成为Java中实现多线程和对象共享的关键。然而,堆内存的分配和回收(通过垃圾回收机制)相对复杂且耗时。 总结而言,理解`String`与`StringBuffer`、运行时...

    中兴通讯面试.pdf

    Java对象的生命周期分为可触及、可到达、可复活和不行触及四个阶段。当对象不再被任何引用变量引用时,它进入了不可触及状态,此时垃圾回收器才会真正回收其内存。在对象变为不可触及之前,如果在`finalize()`方法中...

Global site tag (gtag.js) - Google Analytics