Java22の新機能
JEPの機能のフェーズ
試験フェーズが用意されている。
Javaは半年に一回リリースされる。
フェーズ
- incubator
- 試験的に追加
- Preview
- Javaの文法・構文に関する試験的機能
- Experimental
- JavaVMに関する試験的機能
- Standard
- 標準仕様
JDK22
Region Pinning For G1
しかし、JNIはGCがロック(無効化)されるためGCが行われずヒープ利用効率が悪くなる。
そこで、今回のアップデートではG1GCで使われているRegionのみPinningすることで他の領域でGCが行えるようにする。
他のGCの対応:パラレルGCはregionという概念がないので対応できない。
Statements before super
初期化の流れとしては、親クラスの初期化を待って子クラスの初期化が行われる。
子クラスのフィールドは親クラスの初期化が行われるまでアクセスできないのでthisを使う処理は行えない。
使用例としては、コンストラクタで値を検証したいとき検証してからsuperが呼べる。
Unnamed Variables & Patterns
Goっぽい。
Implicity Declared Classes and Instance Main Methods
JDK21では無名クラスだったがホストにより選択された名前クラスに変更した。
void main()
でもコンパイルは通る。
Foreign Function & Memory API
既存APIの欠点であったヒープ外メモリを直接扱うAPIを提供。
Vector API
ベクトル演算を実行するAPI。
今回のアップデートでパフォーマンスが上がった。
Class-File API
クラスファイルフォーマットにASMは強く依存するので互換性対応が難しい。
内部のAPIでもASMも最新のものには対応できていない。
そこで、クラスファイルAPIを提供することでJDK側が互換性を担保する。
このAPIを使うことでJavaのコードでクラスファイルが動的に作れる。
Launch Multi File Source
複数javaファイルをまとめて、コンパイル操作抜きで実行できるようにした。
String Templates
文字列連結が簡単になった。
. We here propose a second preview in order to gain additional experience and feedback. Except for a technical change in the types of template expressions, there are no changes relative to the first preview.
フィードバックを得るために second preview になっており、21から変更点はない。
▽参考
Structured Concurrency
コードブロックをサブタスクに分けて同時に実行できるようにして最後は同じコードブロックに戻ってくるようになった。
ShutdownOnFailure を使えば実行中のスレッドのいずれかか失敗すれば全体の処理を終了とかできる。
JavaScriptのPromiseっぽい。
Scoped Value
その結果どのコンポーネントがどの順序で状態を更新しているか不明瞭。
そこで、より限定されたイミュータブルな値の受け渡しをサポートする機能。
Stream Gatherers
これまで用意されたものしか使えなかったStream処理の中間操作(map, filterなど)でユーザー定義の処理をサポートする。
23にむけて出ているJEP
Primitive Type in Patterns, Instanceof, and switch
パターンコンテキストでプリミティブ型を使えるようにする。