q*******i 发帖数: 353 | 1 【 以下文字转载自 Java 讨论区 】
发信人: qqwuweiyi (娓娓), 信区: Java
标 题: 求教有没有好的查memory leak的工具?
发信站: BBS 未名空间站 (Sat May 22 17:47:56 2010, 美东)
在eclips运行环境下,主要是heap老是报out of memory,想查查程序哪里有memory
leak,希望能有分析到每个类应用heap的情况,谢谢 |
P***P 发帖数: 1387 | |
q*******i 发帖数: 353 | 3 谢谢,但是似乎这个主要查C,C++,有没有查java这方面比较好的工具?
【在 P***P 的大作中提到】 : valgrind
|
s*********m 发帖数: 2043 | 4 java也许要查这个吗?
不是自动回收的吗?
【在 q*******i 的大作中提到】 : 谢谢,但是似乎这个主要查C,C++,有没有查java这方面比较好的工具?
|
h******u 发帖数: 155 | 5 heap tracking的工具很多阿,Jprofiler,LeakHunter, jprobe,你看一下到底是什么
type的object一直没有释放。 我倒是有更好的research tool,可是不能release 呵呵 |
q*******i 发帖数: 353 | 6 我还想问一下JAVA所谓的memory leak是指应该释放但是没有释放的内存吧。那么是因
为JAVA的GC没有运行对还是什么?但是这个GC不是程序员可以控制的啊?
【在 h******u 的大作中提到】 : heap tracking的工具很多阿,Jprofiler,LeakHunter, jprobe,你看一下到底是什么 : type的object一直没有释放。 我倒是有更好的research tool,可是不能release 呵呵
|
q*******i 发帖数: 353 | 7 我用了一个分析eclipse的heap工具,发现应该是一个hashtable用string用的内存太多
了。不太明白如果一个object被GC remove了,那么它的retained object也会同样被GC
remove然后回收内存吗?还是可能出现它的retained object内存没有被回收而导致
leak?
【在 h******u 的大作中提到】 : heap tracking的工具很多阿,Jprofiler,LeakHunter, jprobe,你看一下到底是什么 : type的object一直没有释放。 我倒是有更好的research tool,可是不能release 呵呵
|
g*****g 发帖数: 34805 | 8 所有object是独立的,一个对象回收之后只是这个object指向的object ref count-1
而已。
GC
【在 q*******i 的大作中提到】 : 我用了一个分析eclipse的heap工具,发现应该是一个hashtable用string用的内存太多 : 了。不太明白如果一个object被GC remove了,那么它的retained object也会同样被GC : remove然后回收内存吗?还是可能出现它的retained object内存没有被回收而导致 : leak?
|
h******u 发帖数: 155 | 9 1. Java memory leak不是真正techincal的memory leak(类似于 C/C++),并不是说
GC没有办法回收memory,而是很多时候programmer忘记及时release reference,以至于
不会再用的object还被 hold,所以导致GC无法 回收
2. GC工作原理是 reachability,一个object能不能被回收,完全决定于它是不是能从
一些roots 到达 (static fields, stack vars),如果没有办法到达,就是
unreachable了,就被回收掉了。但是如果原来 a.f reference在b, 你用完b,忘了把a
.f = null,b就一直reachable,一直没有办法被释放
3. String其实是一个很大的问题,通常会导致java 里面严重的memory问题。eclipse
里面的很多performance 问题实际上可以通过有效的strong 操作很好的避免。具体可
以看一下这些 tips
http://wiki.eclipse.org/Performance_Bloopers |
P***P 发帖数: 1387 | 10 汗, 没看到是java版发过来的, 还奇怪怎么用eclipse编c++
因为java一般不考虑memory leak的, 不过你可以用valgrind启动你的java
用--smc-check=all选项
see http://valgrind.org/docs/manual/faq.html#faq.java
【在 q*******i 的大作中提到】 : 谢谢,但是似乎这个主要查C,C++,有没有查java这方面比较好的工具?
|
c*********s 发帖数: 85 | 11 sounds a little more like a java memory limit problem instead of a memory
leak
This page might give you something to try
http://blog.xam.dk/?p=58 |