所以我正在编写自己的 3D 引擎。我将从 OBJ 文件加载的对象保留在数组列表中。问题是当我从列表中删除该对象时,它不会被垃圾收集。它可能仍然在代码中的某个地方被引用,但是搜索起来很麻烦。所以我想知道是否有一种方法可以在删除对象时锁定该对象,以便每当有东西尝试访问它时它就会抛出错误。
高多边形网格最多可占用数百兆字节的内存。
谢谢。 (我不想发布代码,因为它非常庞大)
最佳答案
这可以通过额外级别的取消引用来解决。不要将 BigObject
存储在集合中,而是存储对象的“信封”,并添加 release()
操作以删除对实际对象的唯一引用:
interface MyInterface {
void usefulOperation();
}
class VeryBigObject implements MyInterface {
public void usefulOperation() {
...
}
}
class BigObjectEnvelope implements MyInterface {
private MyInterface inner = new VeryBigObject();
public void usefulOperation() {
inner.usefulOperation();
}
public void release() {
inner = null;
}
}
创建一个 BigObjectEnvelope
对象的集合,并通过它们的 MyInterface
接口(interface)使用它们。当您完成该对象后,对其调用release()
。即使您在其他地方有对 BigObjectEnvelope
的其他引用,对其调用 usefulOperation()
也会引发异常。
关于java - 如何故意放弃对象进行垃圾回收。 ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105884/