ノート
[ENHANCEMENT] 8386858: [lworld] omit load_prototype_header when UseObjectMonitorTable is used
UseObjectMonitorTable 有効時に Valhalla 固有の mark word flag を読む経路で load_prototype_header を避けるようにしました。
概要#
Valhalla の lworld ブランチでは,オブジェクトがロックされているように見える場合に,
klass から prototype header を読み,Valhalla 固有の markWord フラグを確認します。
しかし,UseObjectMonitorTable が有効な場合,object monitor はオブジェクト・ヘッダ上の markWord として表現されません。
この場合,必要な mark word bit はオブジェクト・ヘッダに残っているため,
load_prototype_header に進まず,読み込んだヘッダをそのまま検査できます。
今回の修正では,test_oop_prototype_bit で prototype header を読む処理を!UseObjectMonitorTable の場合だけ実行するようにしました1。
対象は aarch64,ppc,riscv,x86 の 4 アーキテクチャです。
これにより,より軽量に事が進みます。
ldr(temp_reg, Address(oop, oopDesc::mark_offset_in_bytes()));
-tst(temp_reg, markWord::unlocked_value);
-br(Assembler::NE, test_mark_word);
-load_prototype_header(temp_reg, oop);
+if (!UseObjectMonitorTable) {
+ tst(temp_reg, markWord::unlocked_value);
+ br(Assembler::NE, test_mark_word);
+ load_prototype_header(temp_reg, oop);
+}
結果として UseObjectMonitorTable 有効時は不要な prototype header 読み込みを避け,
オブジェクト・ヘッダから直接 flag を検査する形になります。
2026/06/29 PR 作成#
PR では,UseObjectMonitorTable 有効時には object monitor が displaced mark word として
オブジェクト・ヘッダに置かれないこと,そのため読み込んだヘッダから直接 bit を取得できることを説明しました2。
修正は各 CPU の MacroAssembler::test_oop_prototype_bit に同じ考え方を適用しています。
まず mark word をロードし,UseObjectMonitorTable が無効な場合に従来のよりを実行します。
2026/06/29-30 レビュー#
Coleen Phillimore 氏3から Approve をいただきました。 同氏からは,ObjectMonitorTable は今後取り除かれる予定であり, この変更がより速いコードになるとのコメントもいただきました。
その後,/integrate を行い,sponsor 待ちの状態になりました。
2026/06/30 統合#
David Holmes 氏4からも Approve をいただき,そのまま /sponsor していただきました。
最終的に 28b617e5 として Valhalla の lworld ブランチへ統合されました。
Footnotes#
-
8386858: [lworld] omit load_prototype_header when UseObjectMonitorTable is used by PeyaPeyaPeyang · Pull Request #2591 …Valhalla uses load_prototype_header() to read the Valhalla-specific mark word flags from the klass when the object appears to be locked. However, when UseObjectMonitorTable is ena…GitHub
↩
-
8386858: [lworld] omit load_prototype_header when UseObjectMonitorTable is used by PeyaPeyaPeyang · Pull Request #2591 …https://openjdk.org/projects/valhalla. Contribute to openjdk/valhalla development by creating an account on GitHub.GitHub
↩
-
https://openjdk.org/census#coleenpopenjdk.org↩
-
https://openjdk.org/census#dholmesopenjdk.org↩
-
8386858: [lworld] omit load_prototype_header when UseObjectMonitorTab… · openjdk/valhalla@28b617ehttps://openjdk.org/projects/valhalla. Contribute to openjdk/valhalla development by creating an account on GitHub.GitHub
↩