java内存回收----引用
2013-08-28 22:02
92 查看
前面介绍过java内存泄漏问题,这里详细解释一下java内存回收机制。
对于java垃圾回收机制来说,判断一个对象是否可回收的标准在于该对象是否被引用,因此引用也是JVM进行内存管理的一个重要概念。为了更好地管理对象的引用,从JDK1.2开始,java在java.lang.ref包下提供了三个类:SoftReference、PhantomReference和WeakReference,它们分别代表了系统对对象的三种引用方式:软引用、虚引用和弱引用。归纳起来,java语法对对象的引用有如下四种:
强引用
软引用
弱引用
虚引用
被强引用所引用的java对象绝不会被垃圾回收机制回收,即使内存十分紧张。由于jvm肯定不会回收强引用的对象,因此强引用是造成java内存泄漏的主要原因!
软引用通常用于内存敏感的程序,是强引用很好的替代。
虚引用通过PhantomReference类实现,它类似与没有引用。虚引用对于对象本身没有太大影响,对象甚至感觉不到虚引用的存在。如果一个对象只有一个虚引用,那么它和没有引用的效果大致相同。虚引用主要用于跟踪对象被垃圾回收的状态。虚引用不能单独使用,虚引用必须和引用队列(ReferenceQueue)联合使用。
对于java垃圾回收机制来说,判断一个对象是否可回收的标准在于该对象是否被引用,因此引用也是JVM进行内存管理的一个重要概念。为了更好地管理对象的引用,从JDK1.2开始,java在java.lang.ref包下提供了三个类:SoftReference、PhantomReference和WeakReference,它们分别代表了系统对对象的三种引用方式:软引用、虚引用和弱引用。归纳起来,java语法对对象的引用有如下四种:
强引用
软引用
弱引用
虚引用
强引用
这是java最常见的引用方式,也是大家最熟悉的一个引用,程序创建一个对象,然后赋值给一个引用变量,这个引用就是强引用。被强引用所引用的java对象绝不会被垃圾回收机制回收,即使内存十分紧张。由于jvm肯定不会回收强引用的对象,因此强引用是造成java内存泄漏的主要原因!
软引用
软引用需要通过SoftReference类来实现,当一个对象只具有软引用时,它有可能被垃圾回收机制回收。对于只有软引用的对象而言,当系统内存空间足够时,她不会被系统回收,程序也可使用该对象;当系统内存空间不足时,系统将会回收它。软引用通常用于内存敏感的程序,是强引用很好的替代。
弱引用
弱引用和软引用很相似,但是比软引用生命周期更短。弱引用使用WeakReference类来实现。对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内存。当然不是所当一个对象只有弱引用时,它就立即回收,而是要等到系统垃圾回收机制运行时。虚引用
软引用和弱引用都可以单独使用,但是虚引用不能单独使用,单独使用虚引用没有太大的意义。虚引用的主要作用就是跟踪对象被垃圾回收的状态,程序可以通过检查与虚引用关联的引用队列中是否已经包含指定的虚引用,从而了解虚引用所引用的对象是否即将被回收。虚引用通过PhantomReference类实现,它类似与没有引用。虚引用对于对象本身没有太大影响,对象甚至感觉不到虚引用的存在。如果一个对象只有一个虚引用,那么它和没有引用的效果大致相同。虚引用主要用于跟踪对象被垃圾回收的状态。虚引用不能单独使用,虚引用必须和引用队列(ReferenceQueue)联合使用。
相关文章推荐
- java 内存回收管理机制——Reference中四种引用方式
- Java的垃圾回收机制,GC,和变量的创建和删除的关系(即变量的作用域,for循环中的某个变量,出了for循环再引用就会报错了,因为该变量已经被从内存中删掉了)
- Java内存回收机制--Java引用的种类(强引用、弱引用、软引用、虚引用)
- Java的内存回收——Java引用的种类
- 4 Java 内存回收及算法 — 引用及内存泄漏
- 面向对象_引用类型_内存分析_垃圾回收JAVA028-033
- Java内存与垃圾回收机制
- Java基础之内存回收机制
- java内存垃圾回收模型
- java内存回收
- 基于Java软引用机制最大使用JVM堆内存并杜绝OutOfMemory
- 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类
- Java的内存回收机制
- 使用Handler容易产生的内存泄露以及介绍下Java的4种引用
- java内存回收相关
- Java的内存回收机制
- Java的内存回收机制
- Java的内存回收机制
- Java深入 - Java 内存分配和回收机制-转
- Java内存与垃圾回收