Java 9の先、Java 10/11では最新のハードウェアやOSに最適化したデータのメモリ配置が可能になる。JavaOne 2015
サンフランシスコで「JavaOne 2015」が開幕。基調講演の後半では、2018年かそれ以降になると見られるJava 10やJava 11に向けて開発中のプロジェクトが紹介されています。
最新のハードウェアに最適化されたデータ構造の実現により、実行速度の向上などが見込まれる「Project Valhalla」と「Project Panama」です。
基盤となるハードウェアやOSに適合していく
Java Platform Group Java LanguageアーキテクトBrian Goetz氏。
Java 9の先、Java 10、11を見ていこう。
JavaVMにとってハードウェアの進化は重大なことだ。JavaVMはその基盤となるハードウェアやOSに適合し続けるため、動く標的を狙い続けている。
ここではOpenJDKでそれらに関わる「Project Valhalla」と「Project Panama」を紹介する。
Project Valhallaは、データ自身によりオブジェクトのオーバーヘッドなどを取り除こうとしている。Project PanamaはネイティブコードやネイティブデータでJVMのデータセクションを最適化するものだ。
Javaが登場した頃、シングルコアシステムで小さなメモリ、パイプラインもキャッシュもなかった。いまは、マルチコア、マルチソケットで、CPUキャッシュやメモリも大量に積まれている。コア自身も洗練されてきた。
しかし、Javaのデータとメモリのレイアウトは、昔のプロセッサのモデルのまま。最新のハードウェアやOSに最適化した、よりよいメモリ効率、キャッシュ効率が求められる。
Project ValhallaとProject Panamaはこのために、OSやメモリとJVMとのやりとりを再構成するものだ。特に、メモリとキャッシュの利用効率のためにデータを緻密かつ平坦に配置する。
例えば、毎日目にするようなシンプルな、xとyからなるオブジェクトがあるとする。
これに対するポインタの配列を設定すると、オブジェクトごとのヘッダの分だけオーバーヘッドが存在するし、ポインタのヘッダの部分もオーバーヘッドだ。
Javaが登場した1995年の時点では、すべてがオブジェクトで柔軟性を持たせるために配列ポインタを使うのが望ましかった。
しかし最新のシステムでは、(CPUキャッシュのキャッシュミスのペナルティを避けるため)より純粋なデータが望ましい。
これを解決するため「Value」型を取り入れる。クラスを純粋なデータとして扱える。
するとデータの配置はこうなる。よりキャッシュフレンドリーでありメモリ効率も高い
データの高いローカリティでキャッシュ効率が高まり、プリフェッチで効率よくデータがとらえられる。
もしも超高速なコードを書かなくとも、Value型はJDKが最適化してくれる。
Big change. Projects we started a year ago are aimed at a lower target, JVM, & the operating hardware system. https://t.co/YvTYSdKryQ
— JavaOne Conference (@JavaOneConf) 2015, 10月 26
JavaOne 2015
- [速報]JavaOne開幕。Java 9は「Project Jigsaw」でクラスパスの問題とJDK肥大化の問題を解決する。JaveOne 2015
- Java 9の先、Java 10/11では最新のハードウェアやOSに最適化したデータのメモリ配置が可能になる。JavaOne 2015
- Java20周年を祝ってJavaOneにスコット・マクニーリ氏がスペシャルメッセージ。「Javaプログラマにとって最悪な10のコト」を発表。JavaOne 2015
Oracle OpenWorld 2015
あわせて読みたい
Java20周年を祝ってJavaOneにスコット・マクニーリ氏がスペシャルメッセージ。「Javaプログラマにとって最悪な10のコト」を発表。JavaOne 2015
≪前の記事
[速報]JavaOne開幕。Java 9は「Project Jigsaw」でクラスパスの問題とJDK肥大化の問題を解決する。JaveOne 2015