对象终止化机制(finalization)Object类中有一个finalize方法,设计初衷是在一个对象被真正回收之前用来执行一些清理工作java并没有类似c++的析构函数就通过finalize方法实现。java垃圾回收器的运行时间是不固定的,所以清理工作的实际运行时间 是不能预知。虚引用用来解决(幽灵引用)创建虚引用PhantomReference的时候必须指定一个引用队列。当一个对象的finalize方法调用之后,这对象的虚引用会被加入到队列中,通过检查该队列里面的内容就知道一个对象是否准备要被回收。
作用主要用来实现比较精细的内存使用控制,对移动设备来说很有意义。缓冲区的实现class PhantomBuffer{private byte[] data = new byte[0];private ReferenceQueue<byte[]> queue = new ReferenceQueue<byte[]>();private PhantomReference<byte[]> ref = new PhantomReference<byte[]>(data, queue);public byte[] get(int size){if(size<=0){throw new IllegalArgumentException("Wrong buffer size");}if (data.length<size) {data = null;System.gc();//强制运行垃圾回收器try {queue.remove();ref.clear();//虚引用不会自动清空,手动运行data = new byte[size];ref = new PhantomReference<byte[]>(data, queue);} catch (Exception e) {// TODO: handle exception}}return data;}
}引用队列在对象的可到达性发生变化的时候得到通知某个对象的强引用都已经不存在了,只剩下软引用或弱引用。典型的是哈希表引用对象是作为WeakHashMap的键对象,当其引用的实际对象被垃圾回收后,需要删除哈希表中的键值,在弱引用和软引用对象被添加到队列之前,它们对实际对象的引用会被自动清空。通过引用队列的poll/remove方法可以分别以非阻塞和阻塞的方式获取队列中的引用对象。软引用旨在告诉垃圾回收器程序中的哪些对象是不那么重要的,当内存不足的时候可以暂时回收,如果内存还不足,才会抛出OutOfMemory。软引用非常适合用于创建缓存弱引用强度上弱于软引用,虽然弱引用引用一个对象,但是并不阻止该对象被回收,如果一个对象的所有引用都是弱引用,则该对象会被回收。主要用于解决强引用所带来的对象之间在存活时间上的耦合关系。常用于集合类,尤其是哈希表中。(在强引用中,只要哈希表对象本身还存活,其中包含的键和值是不会被回收的,可能对导致最终消耗掉JVM的全部内存)强引用见得最多,类似 A a = new A();包含在a中的引用b,当且仅当a被垃圾回收后,b才有可能获得被垃圾回收的机会。
详细解决方案
java 引用类型 虚引用
热度:81 发布时间:2023-09-23 11:29:15.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- java 系统单点登录解决方案
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- JAVA WEB导航条,该怎么处理
- java 中Node 有关问题
- 吐了,java Timer 终止不了。
- java web开发解决办法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件
- Hibernate操作数据库 报错java.lang.Integer cannot be cast to java.lang.String如何改
- java struts 文件上载
- java web baidu map开发
- JAVA WEB导航条解决办法
- java 编写ftp上载
- java web中的一个有关问题,困扰小弟我很久了
- java web 与tomcat解决办法
- java web基于j2ee的一些有关问题
- java 内网外网的一个需求,该怎么处理
- jsp 页面 安插ArrayList 报错。为什么,已经加了import="java.util."了呀!
- java dwg 怎样用java把dwg便是aoutcad的格式文件转换成gif,jpg等格式
- 求《Java Web 程序设计与项目实践》解决办法
- java webservice解决方法
- java 与jsp,该怎么解决