是否可以选择在Java / Android中禁用垃圾创建器/收集器?

时间:2013-07-04 05:30:56

标签: java android garbage-collection

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

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

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

此外,垃圾收集仍会留下泄漏,因此在常规C程序中发现泄漏与Java GC的情况相同是乏味的。

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

3 个答案:

答案 0 :(得分:1)

您无法控制垃圾收集器。

它是dalvik VM释放内存的工作。

您可以查看此链接

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

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

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

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

答案 1 :(得分:1)

  

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

垃圾只会在内存不足时触发(并发收集器除外)如果你没有创建太多垃圾而且永远不会耗尽内存,那么就不需要GC而且它不会运行。

为什么你不想为应用做这个,我不知道。这种技术用于高频交易,以最小化或避免GC,但我没有看到应用程序的重点。

  

我只想制作应用程序的内存要求&lt; 1mb。

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

  

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

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

  

此外,垃圾收集仍会留下泄漏,因此在常规C程序中发现泄漏与Java GC的情况相同是乏味的。

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

  

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

没有人阻止你。

答案 2 :(得分:0)

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

myObject = null;

System.gc();

但这不可取。

我会更担心一些具有GC本身并不知道的本地对等体的Java类。例如,当您不再需要位图时,应始终致电Bitmap.recycle()