【发布时间】:2015-04-15 04:32:32
【问题描述】:
我正在尝试调试挂起的应用程序。该程序使用LinkedList 实现的队列,在压力测试期间我发现程序由于堆内存不足而停止响应。我分析了堆转储,发现内存似乎从LinkedList 泄漏。
堆转储的相关部分:
▶java.net.Vectior @ 0xff5eacd0
▶▶java.util.Vector @ 0xff629f30
▶▶▶java.lang.Object[1280] @ 0xff629f50
▶▶▶▶class com.itnade.vsm.staticobject.TrapQueue @ 0xff6b23e8
▶▶▶▶▶java.util.LinkedList @ 0xff6b2460
▶▶▶▶▶▶java.util.LinkedList$Node @ 0xfb954560
▶▶▶▶▶▶java.util.LinkedList$Node @ 0xfb959968
▶▶▶▶▶▶java.util.LinkedList$Node @ 0xfb95ede8
▶▶▶▶▶▶java.util.LinkedList$Node @ 0xfb964230
▶▶▶▶▶▶java.util.LinkedList$Node @ 0xfb969638
...
...
从转储中可以看出,LinkedList$Nodes 没有被删除,而是累积。
程序的大致流程是:
Queue.offer() → Queue.poll → Queue.remove(object)
为什么LinkedList 似乎在泄漏内存,我该如何防止这种情况发生?
【问题讨论】:
-
请提供相关代码以复制问题以及有关环境的更多详细信息:Java 的版本、操作系统、用于执行 Java 应用程序的参数等...
标签: java memory-leaks linked-list queue