Java 9の先、Java 10/11では最新のハードウェアやOSに最適化したデータのメモリ配置が可能になる。JavaOne 2015

2015年10月26日

サンフランシスコで「JavaOne 2015」が開幕。基調講演の後半では、2018年かそれ以降になると見られるJava 10やJava 11に向けて開発中のプロジェクトが紹介されています。

最新のハードウェアに最適化されたデータ構造の実現により、実行速度の向上などが見込まれる「Project Valhalla」と「Project Panama」です。

基盤となるハードウェアやOSに適合していく

Java Platform Group Java LanguageアーキテクトBrian Goetz氏。

Java 9の先、Java 10、11を見ていこう。

fig

JavaVMにとってハードウェアの進化は重大なことだ。JavaVMはその基盤となるハードウェアやOSに適合し続けるため、動く標的を狙い続けている。

ここではOpenJDKでそれらに関わる「Project Valhalla」と「Project Panama」を紹介する。

Project Valhallaは、データ自身によりオブジェクトのオーバーヘッドなどを取り除こうとしている。Project PanamaはネイティブコードやネイティブデータでJVMのデータセクションを最適化するものだ。

fig

Javaが登場した頃、シングルコアシステムで小さなメモリ、パイプラインもキャッシュもなかった。いまは、マルチコア、マルチソケットで、CPUキャッシュやメモリも大量に積まれている。コア自身も洗練されてきた。

しかし、Javaのデータとメモリのレイアウトは、昔のプロセッサのモデルのまま。最新のハードウェアやOSに最適化した、よりよいメモリ効率、キャッシュ効率が求められる。

Project ValhallaとProject Panamaはこのために、OSやメモリとJVMとのやりとりを再構成するものだ。特に、メモリとキャッシュの利用効率のためにデータを緻密かつ平坦に配置する。

例えば、毎日目にするようなシンプルな、xとyからなるオブジェクトがあるとする。

fig

これに対するポインタの配列を設定すると、オブジェクトごとのヘッダの分だけオーバーヘッドが存在するし、ポインタのヘッダの部分もオーバーヘッドだ。

fig

Javaが登場した1995年の時点では、すべてがオブジェクトで柔軟性を持たせるために配列ポインタを使うのが望ましかった。

しかし最新のシステムでは、(CPUキャッシュのキャッシュミスのペナルティを避けるため)より純粋なデータが望ましい。

これを解決するため「Value」型を取り入れる。クラスを純粋なデータとして扱える。

fig

するとデータの配置はこうなる。よりキャッシュフレンドリーでありメモリ効率も高い

fig

データの高いローカリティでキャッシュ効率が高まり、プリフェッチで効率よくデータがとらえられる。

もしも超高速なコードを書かなくとも、Value型はJDKが最適化してくれる。

JavaOne 2015

Oracle OpenWorld 2015

あわせて読みたい

Java プログラミング言語




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本