如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个 reference记住此对象,以便随时观察,但是却因此造成此对象的 reference 数目一直无法为零, 使得对象无法被清除。
java.lang.ref.WeakReference
不过,现在有了 Weak Reference之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference来记住此对象,而不是用一般的 reference。
A obj = new A();
WeakReference wr = new WeakReference(obj);
obj = null;
//等待一段时间,obj对象就会被垃圾回收
...
if (wr.get()==null) {
System.out.println("obj 已经被清除了 ");
} else {
System.out.println("obj 尚未被清除,其信息是 " obj.toString());
}
...
在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。
这类的技巧,在设计 Optimizer 或 Debugger这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以影响此对象的垃圾收集。
java.lang.ref.SoftReference
Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。 被 Soft Reference指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 DirectReference 时才会清除,SoftReference 是用来设计 object-cache 之用的。如此一来SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得Soft Reference 也适合拿来实作 pooling 的技巧。
A obj = new A();
SoftRefenrence sr = new SoftReference(obj);
引用时
if(sr!=null){
obj = sr.get();
}else{
obj = new A();
sr = newSoftReference(obj);
}
分享到:
相关推荐
赠送jar包:junit-platform-launcher-1.8.0-M1.jar; 赠送原API文档:junit-platform-launcher-1.8.0-M1-javadoc.jar; 赠送源代码:junit-platform-launcher-1.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-...
赠送jar包:junit-platform-launcher-1.8.0-M1.jar; 赠送原API文档:junit-platform-launcher-1.8.0-M1-javadoc.jar; 赠送源代码:junit-platform-launcher-1.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-...
匹配mirth3.9server
junit-platform-launcher-1.7.0.jarjunit-platform-launcher-1.7.0.jar
junit-platform-launcher-1.6.2.jarjunit-platform-launcher-1.6.2.jarjunit-platform-launcher-1.6.2.jar
标题 "pymol_launcher-2.6-cp312-cp312-win_arm64.whl.zip" 暗示我们正在处理一个与Python相关的软件包,具体是PyMOL启动器的一个版本。PyMOL是一款强大的分子可视化工具,广泛用于科学界,尤其是生物学和化学领域,...
pymol_launcher-2.1-cp37-cp37m-win_amd64
标题中的“pymol_launcher-2.6-cp311-cp311-win_amd64.whl.zip”是一个包含Python扩展模块的压缩文件,特别提到了“pymol_launcher”,这很可能是用于启动PyMOL的工具。PyMOL是一款广泛使用的分子可视化软件,用于...
标题 "pymol_launcher-2.6-cp311-cp311-win32.whl.zip" 提供的信息表明这是一个与Python相关的压缩包,其中包含了一个名为 "pymol_launcher-2.6-cp311-cp311-win32.whl" 的文件,它是一个Python的wheel(whl)格式的...
launcher2-1-0-0-2018-10
这个版本号"1.6.5-2005-06-02"表明这是Ant Launcher的一个旧版本,发布于2005年6月2日。在软件开发中,版本号通常用于追踪软件的发展历程和修复的问题。旧版本可能不包含最新特性或安全更新,但有时仍被使用以保持与...
开发工具 ant-launcher-1.9.6开发工具 ant-launcher-1.9.6开发工具 ant-launcher-1.9.6开发工具 ant-launcher-1.9.6开发工具 ant-launcher-1.9.6开发工具 ant-launcher-1.9.6开发工具 ant-launcher-1.9.6开发工具 ...
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.21.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.20.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.19.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.18.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.17.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.16.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.15.jar
maven-osgi-plugin-launcher-framework-knopflerfish-1.0.14.jar