网站首页 > 精选教程 正文
static字段的生命周期
static字段如果放入父类的话,只会产生一个static字段,因为static字段不能再子类中复制,static方法不会动态绑定,static方法不具有多态性。所以,尽量少用static,因为它和类的生命周期是一样的。
说明:如果想继续持有对某个对象的引用,希望以后还能够访问到该对象,但是也希望能够允许垃圾回收器释放它,这时就应该使用Reference对象(三个继承自抽象类Reference的类:SoftReference、WeakReference、PhantomReference)。这样,你可以继续使用该对象,而在内存消耗殆尽的时候又允许释放该对象
软引用
软引用(SoftReference):如果一个对象只具有软引用,那就类似于可有可无的生活用品。如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。只 要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。 软引用可以和一个引用队列(ReferenceQueue)联 合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
弱引用
弱引用(WeakReference):如果一个对象只具有弱引用,那就类似于可有可无的生活用品。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。 canonicalizing mappings(规范映射),允许垃圾回收期自动清理“键”(或“值”)。垃圾回收期并不会总在第一次就找到弱引用,而可能要找好几次才能找到。
虚引用
虚引用(PhantomReference):"虚引用"顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。 虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
软引用、弱引用和虚引用的对比
1、对于垃圾回收机制来说,判断一个对象是否可回收的标准就在于该对象是否被引用。
2、强引用和软引用,软引用的实现,软引用的好处。
3、虚引用有什么用?怎么用?
虚引用就是专门用来使用引用队列的一种引用,当垃圾回收器回收你的对象的时候,如果该对象被虚引用引用了,就会把虚引用放入队列。其实就是让你知道该对象被收了,仅此而已。
看下面这个例子:
会依次输出
Soft
Soft
Weak
null
null
执行finalize 回收对象:Weak
null
执行finalize 回收对象:Phantom
猜你喜欢
- 2024-11-14 Java强引用、软引用、弱引用和虚引用使用场景
- 2024-11-14 Java中的四种引用类型的区别与联系?
- 2024-11-14 Python 中弱引用的神奇用法与原理探析
- 2024-11-14 Java的4中引用类型:强引用,软引用,弱引用,虚引用
- 2024-11-14 Java强软弱虚引用 java中强引用,弱引用,虚引用
- 2024-11-14 JVM中如何理解强引用、软引用、弱引用、虚引用?
- 2024-11-14 吃透源码的每一个细节和设计原理--ThreadLocal
- 2024-11-14 Java,基本类型和引用类型,强引用、软引用、弱引用、虚引用
- 2024-11-14 一文带你理解jvm之强软弱虚引用 强软弱虚 程序中应用
- 2024-11-14 面试被问java如何实现强引用、软引用、弱引用、虚引用你知道么?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)