2016-07-05 14 views
-1

私はJavaで複数のスレッドを実行しています。Javaマルチスレッドでキャッシュメモリを共有するには?

私は約5GBの大きなファイルを読み、このファイルを複数のスレッドで共有します。

ファイルを読み込んだ後、複数のスレッドを呼び出します。

私が知る限り、Javaスレッドは共有変数を読み取り、それを独自のキャッシュに格納します。

私の場合、5つのスレッドがある場合、プログラムは最大25 GBのメモリを消費します。

しかし、自分のスレッドが共有変数を独自のキャッシュに格納せず、共有変数を格納せずに共有するようにします。

これを行う方法はありますか?

ありがとうございます。

+0

変数を取得キャッシュされたオブジェクト全体ではなく、単にそれを参照します。 CPUは、5Gの一部をキャッシュすることもできますが、全体をキャッシュすることはできません。一般に、CPUの操作レベルを心配する必要はありません。 – yshavit

答えて

0

スレッドには、データへの参照のみが必要です。 すべてのJavaオブジェクトが参照渡しされます。参照は値渡しされます。

したい場合は、データを保持するためにシングルトンを使用することができ、キャッシュする:あなたはこのようなあなたのデータを呼び出すことができますスレッドで

public class ClassicSingleton { 
    private static ClassicSingleton instance = null; 

    private byte[] yourData; 
    private ClassicSingleton() {} 
    public static ClassicSingleton getInstance() { 
     if(instance == null) { 
     synchronized(SingletonTest.class) { 
     if(instance == null) 
      instance = new ClassicSingleton();  
    } 
     return instance; 
    } 

    public byte[] getYourData(){ 
     return this.yourdata; 
    } 

} 

ClassicSingleton.getInstance().getYourData(); 
+0

'instance'フィールドは、これが正しいためにvolatileでなければなりません。 https://en.m.wikipedia.org/wiki/Double-checked_locking#Usage_in_Javaを参照してください。 – yshavit

関連する問題