2

GUI で実行するサード パーティのソース コードを使用していますが、GUI を使用せずに統合しています。使用しているサード パーティのコードから重大なメモリ リークが発生していることに気付きました。だから私は、サンドボックスのようなものでそのサードパーティアプリケーションインスタンスのオブジェクトを何らかの方法で作成することは可能でしょうか?ガベージコレクター。

そのようなことは可能ですか?同様のシナリオを達成するための代替手段はありますか、または java -jar customApp ... のようなプロセスビルダーから他のアプリケーションを呼び出すことだけが可能だと思いますか? ちょっと醜いですけど…。

編集:そのコードを別のスレッドで実行し、スレッドが完了するのを待つと、ガベージコレクターはそこで呼び出されたものに関連するすべてのオブジェクトを削除しますか?

4

1 に答える 1

1

まず、メモリ プロファイラー (キットなど) を使用して実際にメモリ使用状況を調査し、メモリ消費の理由を完全に理解するまでは、それを手なずけることはまずありません。

次に、Java ではなくネイティブのメモリが問題である場合、何もする必要はありません。

以下は、あなたの希望に近いかもしれません。

問題のあるライブラリを独自のクラスローダーにロードし、メインクラスローダーにロードしてから特別なクラスローダーに継承する非常に狭いインターフェイスを介してのみ参照します。これにより、ライブラリで作成されたオブジェクトへの参照を保持することが非常に難しくなりますが、決して不可能ではありません。たとえば、ライブラリがスレッドを作成し、ThreadLocalオブジェクトに参照を配置する場合、スレッドを強制終了するように指示できない限り、開始した場所に戻ります。それでも、ライブラリが静的参照で大量のオブジェクトを積み重ねる場合、これは役に立ちません。

于 2016-08-28T20:48:36.507 に答える