- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 Java 中 PhantomReferences 的工作原理,并为此编写了这个程序。
public static void main(String[] args) throws InterruptedException {
final ReferenceQueue refQueue = new ReferenceQueue();
Employer emp = new Employer();
emp.setName("John");
PhantomReference<Employer> phantom = new PhantomReference<Employer>(emp, refQueue);
List referenceList = new ArrayList();
referenceList.add(phantom);
Thread th = new Thread(new Runnable(){
@Override
public void run() {
try {
PhantomReference ref = (PhantomReference) refQueue.remove();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
th.start();
for (int i = 0; i < 50000000; i++) {
if(i==(50000000-1)){
Thread.sleep(10000);
System.out.println(i);
System.out.println("setting emp to null ");
emp=null;
System.gc();
}
}
}
但是在这里我没有看到引用被排队,如 java API 文档中提到的。我在这里遗漏了什么吗?
最佳答案
这是重复的...但我找不到原件。
简而言之:它将会被排队......总有一天。不是立即。也许在下一次 GC 运行之后,也许下周。无法保证时间安排。
关于Java PhantomReference 未被排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161046/
我正在使用 LWJGL 库,不幸的是,每当我的场景图中的节点需要死亡时,我需要自己释放纹理/vbo 缓冲区,我什至无法使用 finalize() 方法来做到这一点'不保证它将在 opengl 库期望的
你能帮我理解 PhantomReference 吗?我知道 PhantomReference 有助于跟踪对象何时从堆中移除,并且在调用 finalize 方法后可以访问。我试图用一些代码弄脏我的手,但
我试图了解 Java 中 PhantomReferences 的工作原理,并为此编写了这个程序。 public static void main(String[] args) throws Inter
来自javadoc : Unlike soft and weak references, phantom references are not automatically cleared by the
Java允许写: new PhantomReference(new Object(), null) 在这种情况下 new Object() 会被收集吗? 据我所知,虚引用是 finalize() 方法
我的问题总结了这一切: 强可达 Java PhantomReference 能否阻止其引用对象的内存被垃圾收集器 (GC) 回收? 详情如下: Callum posted this question也
考虑一个使用 PhantomReferences 来避免终结器的库,同时确保释放一些 JNI 资源。 一种架构涉及引用队列和阻塞在引用队列上执行清理操作的线程。 现在的问题是:如何对这一切进行测试?
假设我创建了一个实现 Closable 的类 MyClass。因此,在 close() 方法中,我将释放一些非常重要的资源。好吧,因为它是非常重要的资源,所以我创建了某种安全网络(如《Effectiv
据我所知,当引用指向的对象被删除时,引用会落入 QueueReference。 这里是一个例子,我正要演示这个,但它不起作用。 if 中的代码从未执行过。这是什么意思。我用错了吗?或者 Garbage
演示代码: import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; public class Main
关于 PhantomReference 我唯一知道的是, 如果您使用它的 get() 方法,它将始终返回 null 而不是对象。有什么用? 通过使用 PhantomReference,您可以确保对象无
它们都可以用于清理,几乎没有保证,但是 PR 需要更多的线束编码。那么,有两个选择,为什么我必须更喜欢一个而不是另一个? Javadoc 9 describes finalize问题很大,但这并不会自
我一直在阅读这篇关于 PhantomReference https://www.baeldung.com/java-phantom-reference 的文章以及在那里找到的简化示例代码: publi
关于PhantomReference,我唯一知道的是, 如果你使用它的 get() 方法,它总是返回 null 而不是对象。有什么用? 通过使用 PhantomReference,您可以确保对象无法通
Soft 的文档-,Weak - 和PhantomReference都包含类似于以下内容的行(取自 PhantomReference): At that time it will atomically
我有一个共享资源,我想知道有多少其他对象仍在使用该资源。为此,我想使用 PhantomReference。 由于 ReferenceQueue 不跟踪为它们注册的引用(source,“通知”部分),我
这是我的代码 public class FinalizableObject { @Override protected void finalize() throws Throwable
我有一个 PR,一个 PR 指向的对象 O,以及一个为 PR 设置的 RQ。我有一个不断轮询 RQ 的线程,当它在 RQ 中找到第一个引用时,该线程打印它找到它的时间,然后退出。 一切正常,但是当 O
Javadoc 8 PhantomReference 状态: Phantom references are most often used for scheduling pre-mortem clea
正如 Hans Boehm 在 Google I/O '17 演讲“How to Manage Native C++ Memory in Android”中建议我使用 PhantomReference
我是一名优秀的程序员,十分优秀!