本文原文链接:http://blog.csdn.net/java2000_wl/article/details/8090276 转载请注明出处!
无论是通过计数算法判断对象的引用数量,还是通过根搜索算法判断对象引用链是否可达,判定对象是否存活都与“引用”相关。
引用主要分为 :强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(PhantomReference) 四种,引用的强度依次骤减。
强引用:
就是指在代码之中普遍存在的,类似:“Object objectRef = new Obejct”,这种引用,只要强引用还存在,永远不会被GC清理。
软引用:
用来描述一些还有用,但并非必须存在的对象,当Jvm内存不足时(内存溢出之前)会被回收,如果执行GC后,还是没有足够的空间,才会抛出内存溢出异常。
通过SoftReference类来实现软引用,SoftReference很适合用于实现缓存。另,当GC认为扫描的SoftReference不经常使用时,可会进行回收。
使用方法:
弱引用
弱引用也是用来描述一些还有用,但并非必须存在的对象,它的强度会被软引用弱些,被弱引用关联的对象,只能生存到下一次GC前,当GC工作时,无论内存是否足够,都会回收掉弱引用关联的对象。JDK通过WeakReference类来实现。
当获取时,可通过weakReference.get方法获取,可能返回null
可传入一个ReferenceQueue对象到WeakReference构造,当引用对象被表示为可回收时,isEnqueued返回true
虚引用
虚引用称为“幻影引用”,它是最弱的一种引用关系,一个对象是否有虚引用的存在,完全不会对生存时间构成影响。为一个对象设置虚引用关联的唯一目的就是希望能在这个对象被GC回收时收到一个系统通知。通过PhantomReference类实现。
值得注意的是:phantomReference.get方法永远返回null, 当user从内存中删除时,调用isEnqueued会返回true
其他相关类:
当垃圾回收机制运行,扫描引用关系,GC会对这三种类型的引用进行不同的处理,简单来说,GC首先会判断所扫描到的引用是否为Reference类型,如果为Reference类型,且其所引用的对象无强引用,则认为该对象为相应的Reference类型,之后GC在垃圾回收时这些对象则根据Reference类型的不同进行相应处理。
相关推荐
Java虚拟机面试题1主要涵盖了Java虚拟机(JVM)的相关知识,包括JDK和JRE的区别、Java历史版本的特性、运行时数据区域、垃圾收集算法、类加载机制、虚拟机与物理机的区别、方法调用、指令集、编译过程、并发与线程等...
垃圾回收是Java虚拟机(JVM)自动进行内存管理的重要机制,它负责回收不再使用的对象所占的内存。JVM中主要采用以下几种垃圾回收算法: 1. **标记-清除算法**:这是最基础的收集算法,分为“标记”和“清除”两个阶段...
- 应用场景:最常见的引用类型,如直接赋值的对象引用。 - 特点:只要有强引用指向的对象,垃圾回收器永远不会回收。 **3.2 软引用(Soft Reference)** - 应用场景:适合用于实现内存敏感的高速缓存。 - 特点:当...
本地方法不是由Java虚拟机实现,而是在本地方法接口中定义的。 - **堆(Heap)**:是线程共享的运行时数据区,所有类实例和数组的内存均从此处分配。 - **方法区/永久代**:用于存储已被虚拟机加载的类信息、常量、...
- **强引用、软引用、弱引用、虚引用**:不同强度的引用类型。 - **Java内存模型JMM**:定义了主内存与线程工作内存之间的抽象行为。 **1.6 设计模式** - **常见的设计模式**:单例模式、工厂模式、策略模式、...
在JDK 1.2之后,Java引入了四种不同强度的引用类型:强引用、软引用、弱引用和虚引用。它们按照从强到弱的顺序排列: 1. 强引用:最常见的引用类型,只要强引用存在,垃圾收集器就不会回收对象。除非显式设置为null...
Java虚拟机(JVM)的垃圾回收机制是Java开发中至关重要的一个概念,它负责自动管理内存中的对象,确保程序的稳定运行。垃圾回收(GC)是JVM内置的一种内存管理策略,旨在防止内存泄漏和内存溢出。当对象不再被程序...
GC(Garbage Collection)是Java虚拟机中一个非常重要的组件,负责回收Java堆和方法区中不再使用的对象,以避免内存泄露和溢出。那么,GC要做的事情是什么? 首先,GC需要确定哪些内存需要被回收。Java虚拟机中,...
Java垃圾回收机制是Java虚拟机(JVM)自动管理内存的一种策略,它的主要目标是自动识别并释放不再使用的对象,从而避免内存泄漏。本篇文章将详细介绍垃圾回收的几个关键概念和算法。 首先,如何判断对象可以被回收...
- **定义**: JVM全称Java Virtual Machine,即Java虚拟机,是Java程序运行的底层平台。 - **作用**: 它为Java应用程序提供了一个运行环境,可以执行Java字节码。 - **组成部分**: - **JVM规范**: 规定了JVM的行为和...
1. `finalize`不是必须的,Java虚拟机并不保证一定会调用这个方法。 2. `finalize`方法只能被调用一次,即使在`finalize`执行过程中对象重新变得可达,也不会再次调用`finalize`。 3. 自定义`finalize`方法时,建议...
10.2.1 Java虚拟机语言简介 10.2.2 Java虚拟机 10.2.3即时编译器 *10.3 无用单元收集 10.3.1 标记和清扫 10.3.2 引用计数 10.3.3 拷贝收集 10.3.4 分代收集 10.3.5 渐增式收集 10.3.6 编译器与收集...