1

我的 java 应用程序,总是需要越来越多的内存(从 ~40mb 开始,2 天后大约 140mb)

我用了

./jmap -histo 17364 | head -10 
 num     #instances         #bytes  class name
----------------------------------------------
   1:       1814362       68884536  [C
   2:       1813805       29020880  java.lang.String
   3:          1604        9989632  [B
   4:          1333         266184  [I
   5:          5769         250376  [Ljava.lang.Object;
   6:          2410         235720  java.lang.Class
   7:          2982         119280  java.util.HashMap

感觉是什么分配了这个内存。有什么方法可以检测到哪个实际的 java 类正在使用这些 char-Arrays 和字符串?

4

1 回答 1

0

您需要进行堆分析,使用 jmap -dump:file=fileLocation PID 生成堆转储,之后您可以使用 Eclipse MAT 打开生成的堆转储。

于 2016-03-23T10:54:50.440 回答