我有一个 Java 项目,它通过 COM 与一个 dll 库一起工作。我有 Windows 7,我使用 32 位 Java 1.6。我使用 com4j 的 2012/04/26 版本作为桥梁。有用。
问题是我有一个严重的内存泄漏,这使得我的程序几乎不可能运行。
我订阅了一些 COM 事件。当下一个事件到来时,我观察到堆内存使用的增加,而 GC 从来没有帮助减少它。如果我使用 COM4J.cleanUp() - 内存使用停止增长,但事件不再到达。我的程序使用的堆内存增长得非常快,而实际上没有分配我自己的对象。
VisualVM 中的快照差异:http: //postimg.org/image/cxg77ft8j/
VisualVM 中的堆内存增加:http: //postimg.org/image/m52g63b51/
看起来问题出在 DirectByteBuffer、Cleaner、Variant 和 Finalizer 实例上。我不是自己创造它们的。这是 com4j 内部的东西。
有什么建议么?