1

如果我知道我分配了哪些内存以及何时需要释放它。我可以在 Java 中禁用垃圾收集吗?

我只想让我的应用程序的内存要求<1mb。

我认为必须有一个选项来禁用创建垃圾然后收集它。我根本不想留下垃圾。

此外,垃圾收集仍然会留下泄漏,因此在常规 C 程序中查找泄漏是乏味的,Java GC 也是如此。

让我自己处理我的垃圾..

4

3 回答 3

2

如果我知道我分配了哪些内存以及何时需要释放它。我可以在 Java 中禁用垃圾收集吗?

垃圾仅在内存不足时触发(并发收集器除外) 如果您不创建太多垃圾并且永远不会耗尽内存,则不需要 GC 并且它不会运行。

我不知道为什么要为应用程序执行此操作。这种技术用于高频交易,以最小化或避免 GC,但我没有看到应用程序的意义。

我只想让我的应用程序的内存要求<1mb。

这很难做到,因为环境会使用这么多来运行一个 hello world 程序。您的应用程序可以添加这么多。

我认为必须有一个选项来禁用创建垃圾然后收集它。我根本不想留下垃圾。

如果您不想保留垃圾,那么您需要一个垃圾收集器。如果您自己进行回收,则不需要 GC。

此外,垃圾收集仍然会留下泄漏,因此在常规 C 程序中查找泄漏是乏味的,Java GC 也是如此。

GC 不会像 C 程序那样泄漏,内存总是可以回收的。在 Java 中,“内存泄漏”只是意味着内存使用量的任何不希望的增加。

让我自己处理我的垃圾..

没有人阻止你。

于 2013-07-04T06:20:58.213 回答
1

没有垃圾收集器不在您的控制范围内。

dalvik VM 的工作是释放内存。

你可以检查这个链接

http://developer.android.com/training/articles/perf-tips.html

检查避免创建不必要的对象下的主题。

此外,您应该以不会遇到内存泄漏的方式进行编码。

即使可以禁用 gc,您为什么要这样做?(我不知道,我认为不可能禁用 GC)。GC 将释放内存,如果禁用它,垃圾收集将如何进行。

于 2013-07-04T05:32:34.583 回答
0

你可以做的最接近析构函数的事情:

myObject = null;

System.gc();

但这是不可取的。

我会更担心一些 Java 类有一个本地对等点,GC 对此一无所知。例如,Bitmap.recycle()当您不再需要位图时,您应该始终调用

于 2013-07-04T06:20:44.430 回答