A、キャッシュキャッシュ
(「コンピュータの構成の原則」を参照)、時間的局所性と空間的局所性の原則の原則 - キャッシュや地域の原則を遵守するように設計され、メインメモリの読み取りと書き込みブロック単位は、実行されている間にあります
二次元アレイは行に格納されているため、高速トラバースより列内の行の二次元アレイは、キャッシュ・ブロックは、メインメモリから読み出され、キャッシュはキャッシュヒット率の行をもたらす要素を隣接のカウンターパートと書き込むことカラムよりも大きいですキャッシュヒット率を横断。
パブリック クラスCacheTest { 静的 最終 int型 LINE_NUM = 1024 。 静的 最終 int型の列番号= 1024 ; パブリック 静的 ボイドメイン(文字列[]引数){ 長い [] []配列= 新しい 長い[LINE_NUM] [列番号]。 長いのstartTime = にSystem.currentTimeMillis(); 用(INTが I = 0、I <LINE_NUM; I ++){ // 行遍历 ため(int型 J = 0; J <列番号; J ++ ){ アレイ[I] [J] = I * 2 +J; } } 長い endTimeは= にSystem.currentTimeMillis(); 長い cacheTime = endTimeは- startTimeの。 System.out.println( "キャッシュ時間:" + cacheTime)。 startTime = のSystem.currentTimeMillis(); 用(int型、J <列番号J = 0 J ++){ // 列遍历 ため(INTが I = 0、I <LINE_NUM; I ++ ){ 配列[i] [j]は、I * 2 + = jは、 } } endTimeは = にSystem.currentTimeMillis(); のSystem.out.println( "ノーキャッシュ時間:" +(endTimeは- のstartTime)); } }
第二に、偽の共有
フォールス・シェアリング:キャッシュラインは、複数の変数がある場合は、複数のスレッドが同時にこの複数の変数を更新、変更することはできません。シリアル実行結果としてマルチスレッド
/ * *溶液の偽共有方法:キャッシュ動作64B、オブジェクトヘッダ8B、プラス可変8B、充填プラス6つの不変変数48Bは、変数に対応するキャッシュラインに達する * * / パブリック 最終 静的 クラスFiledLong { 公共の 揮発性を 長い値= 0L ; 公共 長いP1、P2、P3、P4、P5、P6; } / * *方法2偽シェアリング溶液:sun.misc.Contendedコメント * * / @Contended パブリック 最終 静的 クラスFiledLong2 { 公共 揮発性 長い値0L = ; }