2017-11-09 12 views
1

スニペットはリアルタイムの問題のシミュレータです。ファイルを処理するスレッドはほとんどありません。ファイルサイズが約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(); 
    } 
} 
+1

本当にありますか? –

+0

Javaのような動的でメモリ管理されたランタイムでは、「正常にメモリが足りなくなっています」というようなことは実際にはありません。 – pvg

+0

ここで何が起こりたいのかは不明です。これらのスレッドはメモリを食いつぶすだけです。このようなスレッドが正常に動作することは、どういう意味ですか? – mattm

答えて

1

あなたはメモリがなくなる前にループを停止したい場合は、空きメモリの量を測定することができ、スレッド中止:それがゼロになる前に(またはより良いwhileループからブレーク)。

MemoryMXBean memoryMxBean = ManagementFactory.getMemoryMXBean(); 
MemoryUsage memoryUsage = memoryMxBean.getHeapMemoryUsage(); 
int used = memUsage.getUsed(); 
int max = memUsage.getMax(); 
+0

私は、ベクトル変数をグローバル変数を作成し、定期的に使用されたメモリを解放する別のスレッドがあることを考慮する。メモリが利用可能になるまで、スレッドを待機させたりスリープ状態にすることは可能でしょうか? – Hemus7

+0

質問とスニペットを同じように編集しました – Hemus7

関連する問題