原文はこちら。
The original article was written by Billy Korando (Developer Advocate at Oracle).
https://inside.java/2025/02/06/quality-heads-up/
OpenJDK Quality Groupは、リリースの全体的な品質向上の手段としてOpenJDKビルドを使ってのFOSSプロジェクトのテストを推進しています。
Quality Outreach
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
このHeads upは、関係するプロジェクトに送られる定期的なコミュニケーションの一部です。このプログラムの詳細と参加方法については、上記wikiをご覧ください。
Reducing Code and Test Complexity
64ビットアーキテクチャが採用された直後に、-XX:[-|+]UseCompressedClassPointersと-XX:[-|+]UseCompressedOopsの引数が追加され、64ビットアーキテクチャを使用している場合でも、Javaユーザーは32ビット参照を使用できるようになりました。これにより、メモリのオーバーヘッドが削減され、キャッシュミスの低減にも役立ちます。この件についての詳細は、以下の記事をご覧ください。
What is Compressed Class Space? (by Thomas Stüfe)
https://stuefe.de/posts/metaspace/what-is-compressed-class-space/#:~:text=Compressed%20pointers%20are%20a%20way,on%20a%2064%20bit%20platform
-UseCompressedClassPointersオプションを削除すると、+UseCompressedClassPointersがデフォルトになるため、サポートが必要な構成の数が3個から2個に減ります(+UseCompressedClassPointers、+UseCompactObjectHeaders)。このことは、コードの複雑性とテストの労力の大幅な削減に寄与します。さらに、以下のエントリからもわかるように、-UseCompressedClassPointersは64ビットアーキテクチャではうまく機能しません。これは他にも多くの例があると思われます。
8347489: RISC-V: Misaligned memory access with COH #23053
https://github.com/openjdk/jdk/pull/23053
Minimal Benefit
-UseCompressedClassPointersは、Java ユーザーに目に見えるメリットをもたらすことはほとんどありません。-UseCompresseedOopsとの過去の関連性は、ずっと以前に削除されており、-UseCompressedClassPointersは、実質適には単にメモリオーバーヘッドを増やすだけです。
Reasons to Keep -UseCompressedClassPointers
現在のところ、-UseCompressedClassPointersを継続サポートする理由は2つあります。
1. -UseCompressedClassPointersが32ビットOSでうまく機能するため。しかしながら、32ビットOSのサポートは以下の2個のJEPで廃止の方向である(いずれもまもなくリリースされるJDK 24に含まれている)。
JEP 479: Remove the Windows 32-bit x86 Port
https://openjdk.org/jeps/479
JEP 501: Deprecate the 32-bit x86 Port for Removal
https://openjdk.org/jeps/501
2. 500万件以上のクラスがロードされる場合。ただしこのようなケースはまれであり、おそらくプログラマーのエラーが原因であろう。このような場合には、メタスペースに数十GBの非クラス・データもロードされる可能性が高い。
このトピックの詳細については、hotspot-dev メーリングリストの以下のスレッドをご覧ください。
Deprecate -UseCompressedClassPointers?
https://mail.openjdk.org/pipermail/hotspot-dev/2025-February/101023.html
この問題に取り組んでいるエンジニアは、-UseCompressedClassPointersを JDK 25で将来の廃止のための非推奨化(deprecated for removal)とし、この変更による影響についてフィードバックを求めているところです。ご質問やフィードバックは、lilliput-dev メーリングリスト(登録が必要です)までお寄せください。
The lilliput-dev Archives
https://mail.openjdk.org/pipermail/lilliput-dev/