我有一個Java項目,通過COM與一個DLL庫工作。我有Windows 7,我使用32位Java 1.6。我使用2012年4月26日發佈的com4j作爲橋樑。有用。與DirectByteBuffer,清潔,終結者,變種實例Com4j泄漏
問題是我有一個嚴重的內存泄漏,這使得我的程序幾乎不可能運行。
我訂閱了一些COM事件。當下一個事件到達時,我觀察到使用的堆內存的增加,而GC從不幫助減少它。如果我使用COM4J.cleanUp() - 內存使用停止增長,但事件不再發生。我的程序使用的堆內存非常快,而實際上沒有分配我自己的對象。在VisualVM的
快照差異:http://postimg.org/image/cxg77ft8j/
堆內存籌集的VisualVM:http://postimg.org/image/m52g63b51/
貌似問題是DirectByteBuffer,清潔劑,變體和釋放的情況。我不會自己創造它們。這是com4j裏面的東西。
有什麼建議嗎?
非常感謝,無光澤!我很高興這個項目還活着。 – MiamiBeach
我用以下Maven的依賴: org.jvnet.com4j com4j 20120426-2 看起來是過時? 你能告訴我你是如何得到你的穩定版本的com4j:哪個maven artefact從哪個repo中使用過,以及你在哪裏合併過的? –
MiamiBeach
現在我用一種非常奇怪的方式解決我的問題:我只是停用舊的COM對象,並在每15分鐘重新創建一次:)偵聽器斷開GC成功後。 – MiamiBeach