2011-12-19 90 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