Java内存泄漏(循环遍历)

时间:2013-06-04 10:27:46

标签: java optimization memory-management memory-leaks concurrenthashmap

我的服务器有某种内存泄漏或类似的东西,java CPU使用率在一小时内跃升至100%,经过数小时后,它跃升至1100%。

我想知道这个循环遍历是否会导致内存泄漏。

for (Object o : friends.values()) {
    doSomethingWith(o); 
}

朋友是ConcurrentHashMap,当朋友上线或离线时,其内容可能会在某些情况下发生变化。

如果这是安全的,我怎样才能找到内存泄漏?

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以使用visualvm在应用程序运行时监控它。

创建内存转储并使用Eclipse Memory Analyzer来研究转储

您应该可以使用这些工具获取更多详细信息

答案 1 :(得分:1)

ConcurrentHashMap确实是线程安全的。所以我不认为这是你的内存泄漏的根本原因。 事实上,如果你在'doSomethingWith'的代码中有一些可怕或重的代码,它将导致CPU占用问题。 内存泄漏与CPU高速率不一样。 内存泄漏意味着应用程序的内存不断增加而不是再次降低。

答案 2 :(得分:1)

循环遍历肯定会导致内存泄漏,但这取决于你的'doSomethingWith(o)'方法中发生的事情。

您需要掌握一个分析工具,例如 http://www.ej-technologies.com/download/jprofiler/files

或免费工具,例如http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/intro.html