java - 如何故意放弃对象进行垃圾回收。 ( java )

标签 java memory-leaks garbage-collection finalize

所以我正在编写自己的 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/

相关文章:

java - 将文件句子拆分为单词

oracle - 下载哪一个 : JDK or JRE?

java - Spring的值注释在构造函数参数中不起作用

java - 使用 QShell 停止 AS400 上的守护线程

go - 练习 : Equivalent Binary Trees? 的解决方案中的内存泄漏

javascript - Backbone Marionette - 布局 View 僵尸

android - 使用 Eclipse 和 Mat 寻找内存泄漏,卡住转换 hprof 文件

.net - C++/CLI场景调用GC::KeepAlive的便捷方式?

.net - OutOfMemory,但许多对象没有 gcroots

c# - 在 .NET 中,清理嵌套字典父级是否会在垃圾回收时释放所有内存?