关于使用Collection对象时的Java堆空间

时间:2014-04-28 09:44:47

标签: java collections global-variables global local

我正在使用集合对象(主要是Arraylist, hashmap)。 我的程序运行24 * 7。有时,它会抛出内存异常错误:Java堆空间。 我已经为JVM提供了1GB的空间 我的问题是我是否需要为每个方法使用Collection的Global对象或本地对象?

(我每天必须连续处理大约1000000个数据24 * 7)

4 个答案:

答案 0 :(得分:1)

您还可以将堆空间设置为2GB并查看问题是否仍然存在。这是穷人的内存泄漏检测过程。否则使用像VisualVM这样的探查器并检查内存泄漏。

答案 1 :(得分:1)

您可以使用Sonar等源代码质量工具。

您也可以使用Eclipse Memory Analysis tool。它使您能够分析堆转储&找出哪个进程正在使用最大内存。分析具有数亿个对象的生产堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑人。

我总是使用它来修复OutOfMemory异常。

答案 2 :(得分:1)

所有答案都非常有用: 1.当程序的要求是24 * 7运行时,然后在整个方法中使用局部变量。 2.程序必须是线程安全的(如果使用Thread)。 3.使用连接池,因为当您的连接对象在无限循环中使用时,然后创建&每次破坏都是一个很大的性能问题,因此在开始时始终要进行10或15个连接。结帐并检查连接。 4.使用内存分析工具分析堆转储&弄清楚哪个进程正在使用最大内存。

答案 3 :(得分:0)

除非在方法中使用局部变量,否则应使用局部变量。并尝试在其值不再使用时使全局变量为null。但是在使对象为null时你应该更加确定。          这些空对象很容易收集垃圾,这有助于避免内存异常。在迭代集合,数组等时,还要检查代码中的无限循环。