スニペットはリアルタイムの問題のシミュレータです。ファイルを処理するスレッドはほとんどありません。ファイルサイズが約10MBの場合、すべて正常に動作します。ファイルが100MBを超える場合もあります。その後、メモリが不足し、最終的にすべてが失敗します。スレッド2が処理する大きなファイルを取得したかどうかを調べる方法を探していたので、他のスレッドはメモリが解放されるまで待つ必要があります。だから私の意図は、メモリを利用できるようになるまで、ジョブを開始するか、スリープする前に、各スレッドが使用可能なメモリを読み取る方法を見つけることです。 変数をグローバルにし、スレッドをクリーンアップするためにコードが変更されました。 以下はOutOfMemoryError例外をスローする単純なスレッドシミュレータのコードスニペットです。このプログラムを例外なく実行するにはどうすればよいですか?Javaスレッドを使用可能なメモリと同期させるにはどうすればよいですか?
memmoryクランチの各スレッドと通信してスリープ状態にするにはどうすればよいですか。
どのように正常に各スレッドを実行できますか?
import java.util.Vector;
public class ThreadSimulator
{
public static void main(String[] args)
{
Runtime rt = Runtime.getRuntime();
Vector v = new Vector();
Thread t1 = new Thread(new Runnable()
{
public void run()
{
while(true)
{
byte b[] = new byte[1048576];
v.add(b);
}
}
});
Thread t2 = new Thread(new Runnable()
{
public void run()
{
while(true)
{
byte b[] = new byte[1048576];
v.add(b);
}
}
});
Thread t3 = new Thread(new Runnable()
{
@Override
public void run()
{
while(true)
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
v.clear();
}
}
});
t1.start();
t2.start();
t3.start();
}
}
本当にありますか? –
Javaのような動的でメモリ管理されたランタイムでは、「正常にメモリが足りなくなっています」というようなことは実際にはありません。 – pvg
ここで何が起こりたいのかは不明です。これらのスレッドはメモリを食いつぶすだけです。このようなスレッドが正常に動作することは、どういう意味ですか? – mattm