0

PhantomReferences を使用してファイナライザーを回避しながら、一部の JNI リソースを確実に解放するライブラリーを検討してください。

1 つのアーキテクチャには、参照キューと、クリーンアップを実行する参照キューでのスレッド ブロックが含まれます。

ここで問題が発生します。これらすべてのテストを作成するにはどうすればよいでしょうか。

  1. システムのセットアップ
  2. 興味のあるオブジェクトを作成する
  3. ゴミにしよう
  4. System.gc()
  5. どういうわけかスレッドが目覚めるのを待ち、コーヒーの匂いを嗅ぎ、仕事をする
  6. これらすべてが発生したことを証明するために、内部カウンターがチェックされていることをアサートする

Thread.sleep()は効果的ですが、項目 5Thread.yield()については不安です。まったく信頼できません。他にどのようなオプションがありますか?

4

2 に答える 2

1

2GB 未満のヒープで実行していると仮定すると、利用可能なヒープ サイズよりもわずかに小さいバイト配列を割り当てると、予想される OutOfMemoryError がスローされる前に、すぐに完全な gc がトリガーされます。

byte[] foo = new byte[(int) (Runtime.getRuntime().maxMemory()-1)];

バイト配列をヒープ サイズよりも大きくすることはありません。その場合、VM はすぐに OutOfMemoryError をスローする可能性があるためです。VM はとにかくそれほど多くのヒープを提供できないことを知っているからです。

于 2013-01-26T02:33:14.993 に答える