幽灵引用是android中最不会使用的引用,其作为finalize的替代方案,可以避免finalize的timeout。但是有时候并不是很好用,应为其发生在finalize之后,而这时候,这个对象已经不复存在。
这里的思想是,对象不能不存在,这个时候用另外一个对象去表示对这个对象的引用。
这样的话,对象就可以存在了,类似智能指针。
当然我们也可以用weakreference 做类似的事情,weakreference最大的问题是,weakreference.get()返回null的时候, 不一定 finalize()已经被调用,这个顺序很难确定。当然我们其实也不关心这个,只要我们能够收到finalize()或者将要finalize()的事件就可以了。
package sort;
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.util.ArrayList;
import java.util.List;
import sort.Refer.ReferInfo;
public class Refer<T extends Releasable> {
private static ReferenceQueue<Refer<? extends Releasable>> queue = new ReferenceQueue<>();
public static class ReferInfo<T extends Releasable> {
private T t;
private PhantomReference<Refer<? extends Releasable>> phantomRef = null;
}
private T t;
private static List<ReferInfo<Releasable>> mInfos = new ArrayList<>();
static {
start();
}
public static void start() {
new Thread(new Runnable() {
public void run() {
while (true) {
synchronized (mInfos) {
queued = key.queue.remove(Integer.Max);
if (queued != null) {
for (ReferInfo<?> key : mInfos) {
//TODO:
if(key.phantomRef == queued){
System.out.println("enqueued!");
key.t.release();
}
mInfos.remove(key);
break;
}
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.gc();
}
}
}).start();
}
public Refer(T t) {
this.t = t;
ReferInfo<Releasable> info = new ReferInfo<>();
info.phantomRef = new PhantomReference<>(this, queue);
info.t = t;
synchronized (mInfos) {
mInfos.add(info);
}
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("finalize");
}
}
下面是一个releasable
package sort; public interface Releasable { void release(); }
下面是一个使用方法:
package sort;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
public class PhantomreferenceStudy implements Releasable {
public static void main(String[] args) throws InterruptedException {
System.out.println(".....");
Refer refer = new Refer(new PhantomreferenceStudy());
refer = null;
while (true) {
System.gc();
}
}
@Override
public void release() {
//在这里做一些清理的工作。而不是finalize, 这个方法发生在finalize之前。
}
}
打印:
..... finalize enqueued!
完毕
相关推荐
【幽灵猎人】是一款专为Android平台设计的打鬼游戏,其特色在于简洁的界面设计和对第三方框架的广泛运用。游戏虽然简单,但在游戏体验和互动性方面具有一定的吸引力,适合移动游戏开发者和对Android编程有兴趣的学习...
血手幽灵q9鼠标驱动是一款支持绝地求生以及逆战,荒野求生等众多游戏的游戏鼠标驱动程序,帮助玩家们在游戏过程中实现众多功能的驱动效果,支持一键进行各项驱动服务的功能,让你轻松获得所需服务效果!血手幽灵q9...
【标题】"NUC9 幽灵峡谷 红眼峡谷 OPENCORE EFI" 涉及的是在Intel Next Unit of Computing (NUC) 平台上安装macOS操作系统的过程,特别是利用OpenCore引导加载器来实现。OpenCore是苹果社区开发的一种替代Chameleon...
这次我们关注的是官方出品的"幽灵射手"项目源码,这是一款展示Cocos Creator 3D能力的游戏模板,适用于H5、小游戏以及Android平台的打包发布。通过分析这款项目的源码,我们可以深入理解Cocos Creator 3D的核心技术...
本文将深入探讨Java中的四种引用类型:强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)以及幽灵引用(PhantomReference),并讨论它们在GC工作原理和性能调优中的作用。 1. 强引用...
"64K动画大赛作品之一:幽灵古堡" 是一个特定的参赛作品名称,它参与了一场以64K为限制的动画创作比赛。在这样的比赛中,创作者必须在仅有的64千字节(64 * 1024 bytes)内存空间内制作出一段动画,这是一项对技术、...
描述中提到了"幽灵他就可以在pc上正常运行安卓的几乎所有游戏,软件",这里的"幽灵"可能是指某种模拟器或者优化工具,它利用这些额外的库文件实现了在x86平台上兼容ARM指令集,使得原本只支持ARM设备的应用程序也能...
大漠插件是一款广泛应用于网络自动化、游戏挂机、数据抓取等领域的工具,而“幽灵键鼠”功能则是其核心特性之一,它允许程序模拟真实的键盘和鼠标操作,这对于自动化任务尤其有用。 在【幽灵键鼠开发文档】中,我们...
完整 Cocos Creator 3.3.0 项目,支持H5、小游戏、Android打包; 游戏类型 休闲, 冒险, 单机, 安卓, 3D, 弓箭 游戏介绍 幽灵射手是一款拥有Roguelike元素的射击游戏。不仅拥有丰富的技能系统更拥有随机、多变的怪物...
给打了微软幽灵熔断补丁导致电脑性能下降的用户的后悔药,可以关闭幽灵熔断,提高性能。对普通用户来说性能比这点安全更重要!
幽灵和熔断是两种著名的处理器安全漏洞,它们在2018年初被公开,对全球范围内的计算机系统构成了威胁。这些漏洞利用了现代处理器的推测执行和微架构数据采样(MDS)特性,允许恶意软件在不同进程或虚拟机之间窃取...
在Android开发中,避免OOM的关键之一是有效地管理Bitmap对象,因为Bitmap占用大量内存。通过使用软引用或弱引用,可以在内存不足时自动释放Bitmap,从而防止内存泄漏和OOM的发生。例如,可以创建一个持有Bitmap的软...
《深海幽灵Z2 Air Manual》用户手册与系统恢复介绍详细解读 深海幽灵Z2 Air是一款由MECHREVO(机械革命)推出的轻薄型笔记本电脑,以其高性能和便携性著称。本手册主要围绕该设备的用户使用和系统恢复两大主题展开...
标题“模拟键盘鼠标幽灵”指的是一个小型软件,它的主要功能是模拟键盘和鼠标操作。在计算机编程领域,这样的程序通常被用于自动化测试、游戏挂机、数据输入等场景,可以替代人工执行一系列预设的键鼠动作。这种技术...
### 幽灵的礼物——投资领域中的智慧结晶 #### 前言:成功背后的影子 本书《幽灵的礼物》是由一位不愿透露姓名的资深交易员所著,该交易员因其独特的见解和深刻的市场洞察力而在业界被称为“交易圈中的幽灵”。...
用于关闭影响cpu随机读取能力的安全补丁,分别为熔断和幽灵;注:补丁为安全补丁,是否屏蔽取决于自身需求,正常情况下不会感受到系统运行能力的差异
龙管家网吧幽灵
《Spectre幽灵与Meltdown熔断漏洞:InSpectre Release 8深度解析》 在现代计算机安全领域,Spectre幽灵和Meltdown熔断漏洞是两个极具影响力的发现,它们对全球范围内的处理器安全性构成了重大威胁。这两类漏洞源自...
幽灵键鼠是一种特殊的输入设备模拟技术,常用于自动化测试、游戏挂机或者远程控制等场景。这个压缩包文件包含了28个与幽灵键鼠相关的源码示例,可以帮助我们深入理解这种技术的工作原理以及如何在编程中实现。下面...