【Java】---java对象中的4中引用类型
2016-06-04 09:31
375 查看
前两天看他们的面试题,问了java的引用类型和java的关键字和保留字等问题,所以自己也拿来总结一下,保不准什么时候就用上了呢!
对于需要长期运行的应用程序来说,如果无用的对象所占用的内存空间不能得到即时的释放的话,那么在一个局部的时间段内便形成了事实上的内存泄露。
如果要及时地释放内存,最稳妥的方法就是使用完对象之后,立刻执行"object=null"语句。
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
软引用如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。软引用对应着java.lang.ref.SoftReference类,一个对象如果要被软引用,只需将其作为参数传入SoftReference类的构造方法中就行了。
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用对应着java.lang.ref.WeakReference类,同样的道理。一个对象如果想被弱引用,只需将其作为参数传入WeakReference类的构造方法中就行了。
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。虚引用对应着java.lang.ref.PhantomReference类。一个对象如果要被虚引用,只需将其作为参数传入PhantomReference类的构造方法中就行了,同时作为参数传入的还有引用关联队列java.lang.ref.ReferenceQueue的对象实例。
SoftReference,WeakReference,PhantomReference类都继承自java.lang.ref.Reference抽象类。Reference抽象类定义了clear() 方法用于撤销引用关系,get()方法用于返回被引用的对象。
对于需要长期运行的应用程序来说,如果无用的对象所占用的内存空间不能得到即时的释放的话,那么在一个局部的时间段内便形成了事实上的内存泄露。
如果要及时地释放内存,最稳妥的方法就是使用完对象之后,立刻执行"object=null"语句。
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
软引用如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。软引用对应着java.lang.ref.SoftReference类,一个对象如果要被软引用,只需将其作为参数传入SoftReference类的构造方法中就行了。
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用对应着java.lang.ref.WeakReference类,同样的道理。一个对象如果想被弱引用,只需将其作为参数传入WeakReference类的构造方法中就行了。
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。虚引用对应着java.lang.ref.PhantomReference类。一个对象如果要被虚引用,只需将其作为参数传入PhantomReference类的构造方法中就行了,同时作为参数传入的还有引用关联队列java.lang.ref.ReferenceQueue的对象实例。
SoftReference,WeakReference,PhantomReference类都继承自java.lang.ref.Reference抽象类。Reference抽象类定义了clear() 方法用于撤销引用关系,get()方法用于返回被引用的对象。
相关文章推荐
- 学习总结 java线程
- Java 分支结构 - if...else/switch
- HDU2088JAVA2
- HDU2088JAVA
- java response 输出js
- JAVA中字符编码研究
- java.lang.UnsatisfiedLinkError: Couldn’t load locSDK3: findLibrary returned null.
- Java之日期和时间的计算
- 详解Java中用于国际化的locale类
- 死磕Spring AOP系列2:剖析Bean处理器之BeanNameAutoProxyCreator
- Spring事务的配置详解:AOP配置数据库操作的事务
- Java 开发中static 和 final 关键字
- Java千百问_03基础语法(013)_>、>>、>>>有什么区别
- 深入Java核心 Java内存分配原理精讲
- 7款开源Java反编译工具
- Java千百问_02基本使用(008)_eclipse如何关闭代码验证
- Java笔记之方法
- 【java并发】线程锁技术的使用
- 用java.util.Observable实现Observer模式
- 基于Spring的多数据源(Druid)定时任务项目开发(一)<带Demo>