什么是Java内存管理最佳实践?
我正在接管以前的开发人员的一些应用程序。当我通过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);
}
我不正确地说底循环更好吗?也许我错了。
另外,在上述第二个循环之后,我将“ something”设置回null怎么办?这样可以清除一些记忆吗?
在这两种情况下,我都可以遵循哪些良好的内存管理最佳实践,这些最佳实践将有助于使我的应用程序中的内存使用率保持较低水平?
更新:
到目前为止,我感谢大家的反馈。但是,我并没有真正询问上述循环(尽管根据您的建议,我确实回到了第一个循环)。我正在努力寻找一些最佳实践,我会密切注意。“使用完集合后,将其清除”的内容。我只需要确保这些应用程序不会占用太多内存即可。
-
不要试图超越虚拟机。第一个循环是关于性能和可维护性的建议最佳实践。循环后将引用设置回null不能保证立即释放内存。当您使用最小范围时,GC将尽其所能。
(从用户的角度)详细介绍这些内容的书籍是有效的Java
2和实现模式。如果您想了解有关性能和VM内部的更多信息,则需要观看讲座或阅读Brian Goetz的书。