IBM J9

Eclipse OpenJ9は、Eclipse Foundation（2017年9月まではIBM）が開発しているJava仮想マシン。IBMのWebSphere製品や、DB2製品の標準VMとして利用されている。

 沿革 
IBMは元々Java 2対応のJDKを提供しており、チューニングされたclassic VMを同梱していたが、Java 5準拠のJDKを提供するにあたって新たにVMを開発し、IBM J9 VMと命名した。

IBMはJavaOne 2016でJ9をオープンソース化する計画を発表し、その後J9は2017年9月にEclipse Foundationに寄贈され、Eclipse OpenJ9に改称して公開された。

 GCポリシー 
以下のようなポリシーが提供されている。
 optthruput
ヒープに新たなオブジェクトの割り当てができなくなった時点でGCを行う。スループットに優れるが、stop-the-world (STW) の発生時間が長い。2.6より前までのデフォルトポリシー。
 optavgpause
アプリケーションスレッドの中で少しずつマークを行い、ヒープの空きがなくなることを予測するとGCを行う。事前処理によってoptthruputより、スループットは減少するが、STWの時間は抑制される。
 gencon
世代別GC。New世代 (nursery) とOld世代 (tenure) の領域にヒープを分割し、通常はnurseryに対してGC (scavenger) を行う。nurseryはヒープ全体の一部分であるため、scavenger時はSTW時間を大幅に削減することが可能となる。ただし、scavengerはcopy gc方式を採用しておりメモリ空間としては無駄が存在する。v2.6からデフォルトで選択されるポリシーとなった。
 subpool
AIXのみで有効となるGC方式。大量のオブジェクトを生成する際にパフォーマンスを発揮する。
 blanced - v2.6以降
ヒープを一定サイズで分割し、各々の領域に対してGCの必要性を判断、選択された領域に対してのみGCを行う。global gcが大幅に抑制されるが、大規模ヒープに最適化した方式であるため、小規模なヒープでの動作には向いていない。

 診断用ツール 
トラブル診断用のツールが豊富に用意されている。
以下はJVMの起動オプションを付与するだけで利用可能となっている。
 dump agents
例外の発生時といったイベントをトリガーに、javadumpを出力したり、外部ツールを呼び出す機能。
シグナル受信時やOutOfMemoryError発生時にjavadumpを出力する機能は、この機能により実装されている。
 method trace
メソッドの呼び出しや終了、呼び出しの引数などをトレースする機能。

 採用 
IBM SDK
IBM社の製品プロダクトに同梱される形で提供される他に、IBM Developerからの単体ダウンロードも可能となっている。
OpenJDK
OpenJDKディストリビューションの一つであるAdoptOpenJDKがOpenJ9ビルドを配布していた。2021年、AdoptOpenJDKはEclipse Adoptiumへ移行し、それにともないOpenJ9ビルドの提供を終了した。
IBM Semeru Runtimes
AdoptOpenJDKによるOpenJ9ビルド提供終了を受けて、IBMはOpenJDKのOpenJ9ビルドSemeru Runtimesを提供開始した。

 脚注 

 外部リンク 

 IBM Semeru Runtimes
 AdoptOpenJDK
 IBM Developer Kits

Category:Java仮想マシン
Category:IBMのソフトウェア
Category:Eclipse Foundation