BT

Eclipse Open J9 – Eclipse OMRプロジェクトベースのオープンソースJava仮想マシン

| 作者: Monica Beckwith フォローする 562 人のフォロワー , 翻訳者 阪田 浩一 フォローする 1 人のフォロワー 投稿日 2018年3月19日. 推定読書時間: 9 分 |

原文(投稿日:2018/03/01)へのリンク

A note to our readers: You asked so we have developed a set of features that allow you to reduce the noise: you can get email and web notifications for topics you are interested in. Learn more about our new features.

IBMは1997年から彼らのJava仮想マシン (JVM) -- J9 JVM -- に精力的に取り組んできた。J9はクローズドソース (プロプライエタリ) な、独立したJVMの実装としてビルドされていた。クラスライブラリはライセンスされたサン (現OpenJDK) の実装をベースにしていた。J9には拡張やフラグによる最適化が数多くあり、次のようなものがある。階層型コンパイル、クラス共有、エスケープ解析、的確なラージページのサイズ選定といったハードウェア固有の最適化、ソフトリアルタイムなガベージコレクタ、Apache HarmonyによるAPI最適化、動的な事前 (AOT) コンパイル、オブジェクトロック固有の最適化をいくつか、などである。

バージョン5から、IBMのJ9 JVMはIBMのJava開発キット (JDKs) で提供されている。Windowsプラットフォームでは、JDKはIBMのWebsphereアプリケーションサーバ (WAS) に同梱して出荷されている。LinuxやAIX、z/OS、IBM Iプラットフォームでは、JDK (SDKとしても知られる。Sはソフトウェアを表す) と対応するJava実行エンジン (JRE) はIBM DeveloperWorksのダウンロードページからダウンロードできる。また https://hub.docker.com/_/ibmjava/ のDockerHubからもプルできる。形成する要素としてはSDKやJRE、小フットプリントなJava (sfj)、alpineがある。

Eclipse OMRプロジェクト

2016年の初め、IBMはコアの、J9の実行環境の非Java部分をEclipse OMRプロジェクト下でオープンソースにした。OMRプロジェクトは言語非依存のランタイムツールキットである。Eclipse OMRプロジェクトの詳細はOMRプロジェクトの共同リードであるMark Stoodley博士のこのプレゼンテーションにある。https://www.slideshare.net/MarkStoodley/omr-a-modern-toolkit-for-building-language-runtimes

上記のプレゼンテーションからOMRプロジェクトの概要を解説したスライドを何枚か以下に掲載する。

Javaでは、言語ランタイムは以下のようになる。

Rubyに同じようなランタイムがあるとすると、このスライドが示すようになるだろう。

RubyをPythonに置き換えると、実行環境のブロックはRubyとまったく同じになるだろう。IBMがJ9のランタイムを以下のスライドが示すようにコアランタイムコンポーネントに対するレイヤにまとめた理由がよくわかる。

その結果、OMRプロジェクトは言語非依存のランタイム技術コンポーネントとして構築できている。JavaやRuby、Python、その他言語向けのランタイムとして使える。

OMRプロジェクトには以下のようなコンポーネントがある。

  • 実行時に管理されているヒープ向けのガベージコレクションフレームワーク。これにはマーク&スイープや世代別、並行scavengeガベージコレクタ (GCs) が含まれる。
  • インタプリタやスレッドのコンテキストごとに管理するための仮想マシンAPI。
  • ネイティブコード生成向けのコンパイラ。
  • メソッドプロファイリングだけでなくGCやその他実行時の詳細の即時分析に役立つ診断サービス、“Health Center”。
    • トレースライブラリがモニタリングツールとのやり取りを支援する。
  • プラットフォームの抽象化し、クロスプラットフォームなランタイムを可能にする、ポートやスレッド、ユーティリティといったごく少数のライブラリ。またシグナル処理用のライブラリもある。

IBMのエンジニアは以下の言語を対象にOMRコンポーネントをベースにしてランタイムとJITコンパイラも構築してきた。

RubyやPython、SOM++ (Smalltalk)、Lua Vermelhaと呼ぶLuaのJIT、Rosie Pattern Language用のJIT、Swift用局所JIT、およびBase9 (簡単なJavascript風のラインタイム) とKaleidoscope向けの学習用JITやランタイム、LLVMプロジェクトで使われている学習用言語。もちろんOMRプロジェクトから彼ら独自のJava 8向け製品SDKを構築することに加えて、だ。

Eclipse OMRプロジェクトの詳細はここにある。

Eclipse OpenJ9プロジェクト

この記事ではIBMのJ9 JVMの概要から始める。2016年7月までJ9はクローズドソースだった。それからEclipseファウンデーションへ移管し、オープンに管理されるオープンソースプロジェクトとなり、OpenJ9と改名した。IBMはオープンソースコミュニティの影響を見て、J9をIBMのJava提供物の中で中心的なコンポーネントとしながらもオープンな空間で開発が促進されることを、究極的にはより大きなオープンソースコミュニティと結びつくことを熱望していた。2017年9月からEclipse OpenJ9はIBMと他がJ9 JVMに対して一緒に作業できる場所である、オープンソースプロジェクトとなった。

OpenJ9はEclipse OMRを利用し、それ自身はOpenJDK 9や今後のリリースにあるJavaクラスライブラリと適合する。JavaOne 2017でのStoodley博士が行ったプレゼンテーションからスライドを2枚次に示す。https://www.slideshare.net/MarkStoodley/javaone-2017-mark-stoodley-open-sourcing-ibm-j9-jvm

 

 

OpenJ9が付属したOpenJDKについての詳細は、上記のプレゼンテーションにある。役立つリンクをここに記しておく。

OpenJ9とOpenJDK 8

OpenJDK 9でOpenJ9のダウンロードやビルド、実行ができるようになったのはEclipse OpenJ9プロジェクトでの大きな成果だ。しかし、Java 9は長期間サポート(LTS)リリースではなく、多くの開発者は依然としてJava 8を使っており、OpenJDK 8向けのOpenJ9のポートが必要なのは明らかだ。

2017年11月、オープンソースプロジェクト開始からわずか2ヶ月でEclipse OpenJ9はOpenJ9 (https://www.eclipse.org/openj9/oj9_build.html) でOpenJDK 8をビルドできると発表し、AdoptOpenJDKプロジェクトからバイナリをダウンロードもできると発表した: https://adoptopenjdk.net/releases.html?variant=openjdk8-openj9

Java 8用Eclipse OpenJ9という記事によると、"Eclipse Open J9プロジェクトはJava 8からJava 9以降までサポートするJavaリリースすべてにわたってJVMを実装するため、単一のコードストリームを使っている"。この単一ストリーム開発モデルでEclipse OpenJ9は現行でサポートするJDKレベルすべてに対して可能な限り同時にJVM技術の進歩を提供することを目指している。もちろん、JVM拡張のいくつかは主要なJavaのリリース境界を対象にした言語レベルの変更に明らかに結びついており、プログラマが理解し愛するJavaの堅牢なプラットフォームを継続して信頼できるように、Eclipse OpenJ9はこうした選択を尊重している。

また上記の記事ではOpenJ9のパフォーマンスページをユーザに提示している。DayTraderの3つのアプリケーションのベンチマークでOpenJ9を使用したOpenJDK 9とHotSpot VMを使用したOpenJDK 9のテスト結果を比較したものがそこにある。

こうした図を素早くチェックすると、OpenJ9 JVMでの巨大なアプリケーションの起動でスタートアップ時間を削減するクラス共有と事前 (AOT) コンパイル戦略の利点が目立つ。記事からこのグラフを掲載する。

 

記事ではOpenJ9はロードがシステムに適用されたときでさえHotspotを使用したOpenJDKでのメモリフットプリントの半分しか使っておらず、パフォーマンスは同等のものを提供しているということにも言及している。クラウドやプラットフォーム・アズ・ア・サービス (PaaS) のデプロイは一般的に時間単位のメガバイト数で課金されるが、半分のメモリフットプリントで起動できれば特定のユースケースでは費用を相当削減できる可能性がある。

 

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

特集コンテンツ一覧

.NETの派生を理解する

Wayne Citrin 2018年7月18日 午前3時44分

ASP.NET Core - シンプルの力

Chris Klug 2018年6月4日 午前3時26分

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT