を使用しているlibrary codeがあります。私のアプリケーションでは、このコードが多く呼ばれているので、メモリは、DeleteOnExitHook
に積もっています。これにより、ヒープが無期限に成長し、最終的にはOutOfMemoryErrors
が発生します。クラスが完全にパッケージ保護されているので、削除対象のファイルを中間的に削除する簡単なメカニズムがあります。反射マジックでこのリストを空にすることはできますか?File.deleteOnExitで削除待ちのファイルをクリーンアップ
0
A
答えて
1
私が理解しているように、汚れたハックが必要なので、これで十分です。 files
のフィールド値を復元する必要があります。これにより、通常のシャットダウン(または次にこのハックを使用するとき)がうまく動作するようになります。
注:他のライブラリによってスケジュールされたファイルを含むすべてのファイルが削除されます。あなたのケースでそれが安全であることを確認してください。
またjava.lang.reflect.Method run = Class.forName ("java.io.DeleteOnExitHook").getDeclaredMethod ("runHooks");
java.lang.reflect.Field files = Class.forName ("java.io.DeleteOnExitHook").getDeclaredField ("files");
run.setAccessible (true);
files.setAccessible (true);
run.invoke (null);
files.set (null, new java.util.LinkedHashSet <String>());
、ちょうど
files.get (null)
でスケジュールファイルを取得するには、あなたが行くようにもセットから名前を削除、セットを反復処理し、手動でファイルを削除します。この方法で、あなたは自分自身を削除するファイルを決定することができます。
関連する問題
- 1. ClearQuestユーザーのクリーンアップ/削除
- 2. Nodejs直ちに生成ファイルを削除
- 3. ドットネット管理プログラムの削除時のクリーンアップ
- 4. 待ちfs.readFileSyncが私のファイルfunctions.jsで
- 5. ファイル変更までのスレッド待ち
- 6. TFS 2015 - チームプロジェクトは削除されず、ステータス待ちのままです。
- 7. システムがファイルを削除するのを待っています
- 8. 閉じる後にファイルが削除されるのを待つ
- 9. asp.net Webサイトからoracle 10gを削除 - Commintを待ちますか?
- 10. ANSI C - プロセスの実行、待機、ファイルの削除
- 11. ファイルの時間/待ち時間のベンチマーク
- 12. アプリ削除でiCloudユビキタスコンテナがクリーンアップされていませんか?
- 13. ファイル名を持ち、削除してください
- 14. 即時待ちの返り値対延期待ちの待ち時間
- 15. Dockerオーバーレイネットワークは削除されたコンテナをクリーンアップしません
- 16. 待ち
- 17. 待ち
- 18. 待ち
- 19. 待ち
- 20. 待ち()
- 21. ファイルをファイル名で削除してFTPでファイルを削除する
- 22. ファイルの削除と親ディレクトリの削除
- 23. ゾンビプロセスを待たずに削除C
- 24. Windowsコマンドプロンプトでファイルを削除
- 25. C++でのファイル削除
- 26. C#非同期タスク待機待ちvs待ち受け
- 27. タイムアウトでファイルが作成されるのを待ちます
- 28. easynetqでrabbitmq待ち行列待ち時間
- 29. ファイルの削除エラー
- 30. 削除ファイル
ビットを読み込んだ後、 'deleteOnExit()'は非常に奇妙で部分的に危険な方法のようです。これは '' System.exit(0) ''のような "正常終了"で削除するファイルの文字列だけを格納します。ハード・パワー・オフや 'kill 'や' System.exit(1) 'のような他の終了とともに、ファイルは削除されません。ですから、私は必ず 'deleteOnExit()'の使用を避けようとします。使用したライブラリを別のライブラリに置き換えることはできますか?実際には、反射を使用して可視性を変更し、メソッドを単純な 'delete'で上書きすることができます。 – Korashen
Alternativly、ほとんどの好きではあまり便利ではなく、ライブラリをフォークし、そのコードを書き直して、自分で構築してください。 (そしておそらくプルリクエストを作成するのでしょうか?) – Korashen
私はそこにパッチを提出しても構いませんが、おそらくそれが合併するまでに時間がかかるでしょう。 –