有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jdk1中的java内存泄漏。7

我们已经试过JDK1.7.0_02。运行十天会导致以下对象出现420 MB内存泄漏:
-爪哇。朗。管理。回忆,
-[C(字符数组),
-爪哇。util。HashMap$条目,
-[Ljava.util.HashMap$Entry(HashMap$Entry的数组),
还有其他一些

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

“jmap-histo:live”命令的第一个输出:

 num     #instances         #bytes  class name
----------------------------------------------
   1:        229527       14926888  [C
   2:        289290       13885920  java.lang.management.MemoryUsage
   3:        321029       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:live”命令的最后一次输出在第一次输出后的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个直方图,在每天的测试后绘制。它们显示对象的线性数量在增加。这绝对不是噪音。这是一个每天42MB的稳定泄漏

你有没有观察到类似的行为?在什么情况下?你是怎么应付的


共 (1) 个答案

  1. # 1 楼答案

    给定Java 7中的代码与Java 6略有不同(但几乎相同)。我希望看到这些细微的差别。我会在两天后拍摄快照,看看JVM是否仍在升温。例如,连接更多的监控客户机会增加这些值(因为这些大多是监控对象)

    如果它是一个内存泄漏,每两天32K,那么在运行一年后可能会浪费约5MB的内存,并且不到5美分的内存。就我个人而言,我认为这太小了,不值得担心。