HeadlinesBriefing favicon HeadlinesBriefing.com

JDK 28 値クラス プレビュー機能の最適化 (JEP 401)

Hacker News •
×

この投稿では、JDK 28 のプレビュー機能、特に JEP 401 について説明します。これは、プレビュー機能として統合された主要な Valhalla のマイルストーンです。値クラスは、プログラムのセマンティクスと JVM が利用できる最適化の機会を伝える能力を高めます。しかし、通常のクラスがパフォーマンスの下限を提供し、値クラスがそれを下回ることはできないという考えは根拠がありません。善意のプログラムが、メソッドが相互作用する際に JVM にフラット化表現と参照表現の間の変換を強制し、メリットを相殺する可能性があります。値クラスの主な最適化の利点は、アイデンティティを放棄することで、ランタイムが適切な表現を選択し、ポインタ追跡を避けるために値をフラット化し、コンポーネントをレジスタやスタック上でスカラー化できるようにすることです。アイデンティティの要件がないため、エスケープ解析は自明になります。不変性によりフラット化が可能になります。JEP 539 (Strict Field Initialization) により、JVM は final フィールドがその外側のオブジェクトが観測可能になる前に初期化されることを信頼できます。このようなフィールドは後で更新できないため、JVM は割り当ての破損をリスクにさらすことなく、非アトミックなフラット化レイアウトを使用できます。ミュータブルなフィールドは、ティアフリーな割り当てを維持する必要があります。ミュータブルなフィールドに、アトミックなフラット化更新には大きすぎる値が含まれている場合、JVM は参照レイアウトを使用する必要があります。32 バイトのペイロードを持つ Four Longs レコードを考えてみてください。これはアトミックなフラット化更新には大きすぎます。しかし、Envelope レコードでは、ペイロードが厳密に初期化された final フィールドであるため、非アトミックなフラット化レイアウトが可能です。Envelope がミュータブルであった場合、一貫性を維持するためにレイアウトは REGULAR に戻ります。