使用ConcurrentLinkedQueue $ Node的Java内存"泄漏"

Nic*_*ich 7 java memory-leaks heap-dump

我有一个有趣的困境,我似乎有内存泄漏(或不断增长的数据结构).当我分析我的内存使用情况时,我得到了典型的"随时间线性提升"图表.试图找出问题的原因是什么,我做了一个堆转储.我发现超过50%的内存被分配给a ConcurrentLinkedQueue node.内存的高端消费者,com.singularity.ee.agent.util.chjava.util.concurrent.ConcurrentLinkedQueue$Node为看到下面的图片.

在此输入图像描述

我不知道util.ch它是什么,但它似乎与节点绑定,因为每个ch都有一个节点的立即引用,所以不用担心关注它.

现在尝试查找对$ Node最近的GC的引用,我得到以下内容:

在此输入图像描述

奇怪的是,它没有ConcurrentLinkedQueue $ Node,甚至没有ConcurrentLinkedQueue作为父级.所有引用都是我不理解的奇怪类型,kh, uc, z, g, etc.有谁知道这些类型是什么?

我试图找出导致问题的确切原因,但我无法找到这些节点甚至是如何创建/保存的.

这是踢球者:我不在代码中的任何地方使用ConcurrentLinkedQueue.我确实使用了ConcurrentHashMap,但是没有很多HashMap $ Node,所以不应该是问题.

有没有人知道如何创建这些节点或为什么我有这么多的实例?

回答依赖问题:我正在运行tomcat 6,java 6,Java Spring.

Nic*_*ich 2

事实证明,我有一些来自 AppDynamics 的专有代码导致了这个问题。我向他们开了一张票,他们在下一个版本中解决了这个问题。不过还是感谢您的所有帮助!