java - 有哪些 Java 内存管理最佳实践?

标签 java memory-management

我要从以前的开发人员那里接手一些应用程序。当我通过 Eclipse 运行应用程序时,我看到内存使用量和堆大小增加了很多。经过进一步调查,我发现他们在循环中一遍又一遍地创建对象以及其他事情。

我开始进行清理工作。但是我经历的越多,我就越想问“这真的有什么用吗?”

例如,不是在上面提到的循环之外声明一个变量,而是在循环中设置它的值......他们在循环中创建了对象。我的意思是:

for(int i=0; i < arrayOfStuff.size(); i++) {
    String something = (String) arrayOfStuff.get(i);
    ...
}

String something = null;
for(int i=0; i < arrayOfStuff.size(); i++) {
    something = (String) arrayOfStuff.get(i);
}

我说底部循环更好是不正确的吗?也许我错了。

另外,在上面的第二个循环之后,我将“某物”设置回 null 怎么办?这会清除一些内存吗?

在这两种情况下,我可以遵循哪些良好的内存管理最佳实践来帮助我在应用程序中保持较低的内存使用率?

更新:

到目前为止,我感谢大家的反馈。但是,我并没有真正询问上述循环(尽管根据您的建议,我确实回到了第一个循环)。我正在尝试获得一些我可以留意的最佳实践。类似于“使用完集合后,将其清除”之类的东西。我真的需要确保这些应用程序不会占用太多内存。

最佳答案

不要试图智取虚拟机。第一个循环是建议的最佳实践,无论是性能还是可维护性。在循环之后将引用设置回 null 并不能保证立即释放内存。当您使用尽可能小的范围时,GC 将尽其所能。

详细介绍这些内容的书籍(从用户的角度来看)是 Effective Java 2Implementation Patterns .

如果您想了解有关性能和 VM 内部的更多信息,您需要查看 Brian Goetz 的讲座或阅读书籍.

关于java - 有哪些 Java 内存管理最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/627784/

相关文章:

objective-c - NSUserDefaults 和 NSMutableArray 的内存泄漏

java - 从一个 ArrayList 提取并修改到另一个 ArrayList

Java:多个线程同时读取同一个InputStream

java - tcResultSet oim 中列类型-3 的数据类型是什么?

java - Libgdx - didpose 一遍又一遍?

java - 正则表达式 Java 字符串由星号分割

C - 使用 malloc 分配的内存过多

c++ - 指针数组的动态分配及其替代方案

python - 如何找到扭曲服务器内存使用量增加的根源?

c++ - 删除之前删除的内存