【引用自】http://java.chinaitlab.com/oop/716371.html
从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。
1.强引用
本章前文介绍的引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java
虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。
2.软引用(SoftReference)
如果一个对象只具有软引用,那就类似于可有可物的生活用品。如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java
虚拟机就会把这个软引用加入到与之关联的引用队列中。
3.弱引用(WeakReference)
如果一个对象只具有弱引用,那就类似于可有可物的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它
所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,
因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
4.虚引用(PhantomReference)
"虚引用"顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。
虚
引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列(ReferenceQueue)联合使用。当垃
圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是
否已经加入了虚引用,来了解
被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
分享到:
相关推荐
在Java编程语言中,"等级分类"通常指的是类的继承关系,这是面向对象设计的核心概念之一。类的继承允许我们创建一个新类(子类),它扩展或基于已存在的类(父类)。这种方式有助于代码重用,使得我们可以构建更加...
在Java编程语言中,分类目录通常指的是将不同的代码、库或者资源按照一定的逻辑结构进行组织的方式,便于管理和使用。在2017年的版本中,Java开发者可能关注的一个重点是如何有效地管理和组织与医疗相关的项目。这个...
### Java关键字分类解释 #### 一、类与接口定义关键字 - **class**: 在Java中,`class`关键字用于声明一个类。类是面向对象编程的基本单元,它定义了一组属性(成员变量)和方法(成员函数),这些共同构成了一个...
### Java异常分类详解 #### 一、概述 Java异常处理机制是Java语言中一项重要的特性,它能够帮助开发者更好地管理程序中的错误情况,确保程序在遇到问题时能够优雅地处理而不是突然崩溃。Java中的异常主要分为两大...
java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度...
3. **基础语法**:包括数据类型(基本类型和引用类型)、变量声明、运算符、流程控制(if-else,switch,for,while,do-while循环)和函数的使用。 4. **类与对象**:理解面向对象编程的基本概念,如类的定义、...
"Java中调用Weka" Weka是一个非常流行的数据挖掘工具,Java是目前最流行的编程语言之一。...在Java中调用Weka可以让开发者们更方便地使用Weka的功能,并且可以更方便地对数据进行分类、聚类和预处理。
标题《Java异常分类.pdf》表明本文档旨在介绍Java编程语言中异常的分类。异常是程序在运行时出现的非正常情况,它会打断正常的程序流程。在Java中,所有的异常都是通过Java异常类体系来处理的。根据异常在Java中的...
这个文档,"javaApi分类[参考].pdf",显然是一个详细的Java API参考指南,涵盖了多个关键领域,包括用户界面、图形、数据传输、事件处理、输入输出、网络编程、并发控制、安全性、数据库访问以及文本处理等。...
5. 注释:Java注释用于解释说明程序的文字,分类有单行注释和多行注释。 面向对象 1. 面向对象概述:面向对象是一种编程范式,强调对象和类的概念。 2. 面向对象和面向过程的区别:面向对象强调对象和类的概念...
面试题是衡量开发者技能水平的重要手段,这里我们针对“java分类整理的面试题”进行深入探讨,覆盖基础、框架、Web及数据库等相关知识。 **一、Java基础** 1. **Java数据类型**:了解基本数据类型(如int, double,...
- **数据类型**:Java有两类数据类型:基本数据类型(如int、char、float等)和引用数据类型(如类、接口、数组)。 - **变量**:存储数据的容器,声明时需指定数据类型。 - **常量**:用final关键字定义,一旦...
THUCTC(THU Chinese Text Classification)是由清华大学自然语言处理实验室推出的中文...如果您在THUCTC基础上发表论文或取得科研成果,请您在发表论文和申报成果时声明“使用了清华大学THUCTC”,并按如下格式引用:
### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了...
java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度...
本文档系统列举了Java的关键字及其用法分类,总共分为以下几个类别:访问控制、类、变量修饰符、流程控制、数据类型、异常处理、包和变量引用、运算符等。 访问控制 * public:公共的,所有类都可以访问。 * ...
- **方法引用和构造器引用**:这些特性进一步强化了lambda表达式的使用,可以直接引用类的方法或构造器,避免重复编写相同逻辑。 - **Stream API**:提供了一种序列处理数据的新方式,可以对集合进行高效的操作,...
Lingpipe是一个用Java语言编写的自然语言处理工具包,由Alias公司开发,目前版本为3.5。它提供了从基础到高级的多种自然语言处理功能,例如主题分类、命名实体识别、词性标注、句题检测、查询拼写检查、兴趣短语检测...
5. **异常处理**:Java通过try-catch-finally语句块进行异常处理,理解异常的分类和如何自定义异常。 6. **集合框架**:List、Set、Queue和Map接口以及ArrayList、LinkedList、HashSet、HashMap等实现类的使用。 7...
- **类加载器分类**: - **启动类加载器(Bootstrap ClassLoader)**:它是所有类加载器的父类,用于加载Java的核心库(如java.lang.*包下的类),这些类通常位于`JAVA_HOME/jre/lib/rt.jar`中。 - **扩展类...