2011-12-19 82 views
0

我们试过jdk 1.7.0_02。十天运行给420 MB以下对象的内存泄漏:
- java.lang.management.MemoryUsage,
- [C(字符数组),
- $的java.util.HashMap入境,
- [Ljava.util.HashMap $ Entry(HashMap $ Entry的数组),
等等。jdk1.7.0中的内存泄露

这不会发生在jdk1.6.x上。

的第一输出 “JMAP -histo:活” 命令:

num  #instances   #bytes class name 
---------------------------------------------- 
    1:  229527  14926888 [C 
    2:  289290  13885920 java.lang.management.MemoryUsage 
    3:29  10272928 java.util.HashMap$Entry 
    4:   69923  10262184 <constMethodKlass> 
    5:   69923  9527672 <methodKlass> 
    6:   7048  7787040 <constantPoolKlass> 
    7:  241693  7734176 java.lang.String 
    8:   2038  5898408 [Ljava.util.concurrent.ConcurrentHashMap$HashEntry; 
    9:   7048  5479056 <instanceKlassKlass> 
    10:   5954  4499552 <constantPoolCacheKlass> 
    11:   67844  4091672 [Ljava.util.HashMap$Entry; 
    12:   41250  3942848 [B 
    13:   65649  3151152 java.util.HashMap 
    14:   71891  2875640 java.util.TreeMap$Entry 
... 
Total  2320965  138000120 

中的最后输出 “JMAP -histo:住” 命令在10天内完成后的第一次:

num  #instances   #bytes class name 
---------------------------------------------- 
    1:  3147110  151061280 java.lang.management.MemoryUsage 
    2:  3178875  101724000 java.util.HashMap$Entry 
    3:  1087332  53822632 [C 
    4:  1099503  35184096 java.lang.String 
    5:  639442  31529224 [Ljava.util.HashMap$Entry; 
    6:  637247  30587856 java.util.HashMap 
    7:  629422  25176880 [Ljava.lang.management.MemoryUsage; 
    8:  314711  17623816 com.sun.management.GcInfo 
    9:   70107  10292776 <constMethodKlass> 
    10:  631864  10109824 java.util.HashMap$EntrySet 
    11:  314711  10070752 sun.management.GcInfoCompositeData 
    12:   70107  9552696 <methodKlass> 
    13:   7075  7817080 <constantPoolKlass> 
    14:  314713  7554128 [Ljava.lang.Integer; 
    15:   2048  5898744 [Ljava.util.concurrent.ConcurrentHashMap$HashEntry; 
    16:   7075  5497200 <instanceKlassKlass> 
    17:  315792  5052672 java.lang.Integer 
    18:   47680  4912352 [B 
... 
Total  13206419  558217856 

我还有8个其他的直方图,测试后的每一天做出。它们显示线性物体的数量在增加。这绝对不是一个噪音。这是一个稳定的泄漏每天42 MB。

您是否观察过类似的行为?在什么情况下?你是怎么应付的?

+0

你的问题是什么? – tobiasbayer 2011-12-19 08:47:20

+1

-1没问题;如果这是一个错误报告:请联系Oracle。 – 2011-12-19 08:59:00

+0

@CodeBrickie,问题是 - 你有没有观察到类似的行为?在哪些场景中?你是怎么应付的? – Neighbour 2011-12-19 13:18:56

回答

4

鉴于Java 7中的代码与Java 6稍有不同(但几乎相同),我期望看到这些非常细微的差异。我会在2天后拍摄快照以查看JVM是否仍在升温。例如,连接更多监控客户端会增加这些值(因为这些主要是监控对象)。

如果是内存泄漏,每隔两天32K,这可能会在运行一年后浪费〜5 MB,价值不到5美分的内存。就我个人而言,我认为这太小而不必担心。

+1

事实上,数字之间的差异非常小,以至于它可以被视为噪声(可能是某个时间点的临时对象)。这些数字很难证明存在内存泄漏。 – Jesper 2011-12-19 10:09:57

+0

@Jesper我怀疑你是对的,这就是为什么需要更多的样本(每周可能),如果你认为这是值得的。 – 2011-12-19 11:01:03

+0

@Peter Lawrey,有一个错误。目前两个直方图之间的间隔是10分钟,而不是2天。我将尽快提供大量的直方图。 – Neighbour 2011-12-19 13:21:07