0

COM 経由で 1 つの dll ライブラリを操作する Java プロジェクトがあります。私は Windows 7 を使用しており、32 ビット Java 1.6 を使用しています。2012/04/26 リリースの com4j をブリッジとして使用しています。できます。

問題は、深刻なメモリ リークがあり、プログラムの操作がほとんど不可能になっていることです。

いくつかの COM イベントを購読しています。次のイベントが到着すると、使用されるヒープ メモリの増加が観察されますが、GC はそれを減らすのに役立ちません。COM4J.cleanUp() を使用すると、メモリ使用量の増加は止まりますが、イベントは到着しなくなります。プログラムで使用されるヒープ メモリは非常に高速に増加しますが、実際には自分自身のオブジェクトが割り当てられていません。

VisualVM のスナップショットの違い: http://postimg.org/image/cxg77ft8j/

VisualVM でのヒープ メモリの増加: http://postimg.org/image/m52g63b51/

問題は DirectByteBuffer、Cleaner、Variant、および Finalizer インスタンスにあるようです。私は自分でそれらを作成しません。これは com4j 内の何かです。

助言がありますか?

4

1 に答える 1