Project Amber
Project Amber は、生産性を向上するための小規模なJava言語機能改善を行うプロジェクトです。
これまでに、ローカル変数型推論の var や、テキストブロック、スイッチ式など、多くの言語機能が提供されてきました。
今後は、Derived Record Creation が予定されています。
Derived Record Creation は、いわゆるウィザー(wither)メソッドを構文として導入するものです。
例えば以下のようなレコードがあった場合、
record Point(int x, int y, int z) { }
xを2倍した新しい Point インスタンスを以下のように生成できるようになる予定です。
Point newLoc = oldLoc with { x *= 2; };
この他には、パターンマッチングでプリミティブ型が使えるようになる予定です。
switch (x.getYearlyFlights()) { case 0 -> ...; case 1 -> ...; case 2 -> issueDiscount(); case int i when i >= 100 -> issueGoldCard(); case int i -> ... appropriate action when i > 2 && i < 100 ... }
以下のような Constant Patterns(定数パターン) も検討されています(現在はBox(42)のような記述はできない)。
record Box(short s) {} Box b = ... switch (b) { case Box(42) -> ... case Box(int i) -> ... }
あとは、一旦取り下げとなった String Templates の進捗に期待です。
Project Valhalla
Project Valhalla では、Javaのメモリモデルをより効率的にすることを目指しています。
2026年は、以下のような 値型(Value Types) の導入が予定されています。
value record Point(int x, int y) {}
value class Name { String name; int length; }
value クラスは、メモリ上のオブジェクト表現をコンパクト化します。
以下のようなヒープ上のオブジェクトが、
+--------------+
| LocalDate[5] |
+--------------+
| 87fa1a09 | -----------------------> +-----------+
| 87fa1a09 | -----------------------> | LocalDate |
| 87fb4ad2 | ------> +-----------+ +-----------+
| 00000000 | | LocalDate | | y=1996 |
| 87fb5366 | --- +-----------+ | m=1 |
+--------------+ | | y=2026 | | d=23 |
v | m=1 | +-----------+
+-----------+ | d=23 |
| LocalDate | +-----------+
+-----------+
| y=1996 |
| m=1 |
| d=23 |
+-----------+
以下のような表現となります。
+--------------+
| LocalDate[5] |
+--------------+
| 1|1996|01|23 |
| 1|1996|01|23 |
| 1|2026|01|23 |
| 0|0000|00|00 |
| 1|1996|01|23 |
+--------------+
値型は、参照型をプリミティブ型のようなメモリレイアウトとして扱うことで、パフォーマンスとメモリ効率が向上します。
プリミティブ型に対して、(ボクシングにより)参照型のようなメソッド呼び出しを可能とする言語拡張も検討されています。
int i = 12; double iAsDouble = i.doubleValue();
値型の導入に際して、以下のような null制限型、null許可型の導入も検討されています(プリミティブ型にnull値が許容されないように、値型に対してnullを制限したいため)。
Foo!: null制限型(値集合からnullが除外される)Foo?: null許可型(値集合に意図的にnullが含まれる)
null制限型を使うと、以下のようになります。
void printAll(Range! r) { for (int i = r.start; i < r.end; i++) System.out.println(i); } printAll(new Range(5, 50)); printAll(null); // compiler error
Project Leyden
Project Leyden はJavaの起動時間、ピークパフォーマンスまでの時間やフットプリントを改善するプロジェクトです。
これまで、CDS(Class Data Sharing) を拡張する形の AOT(Ahead-of-Time) 機能により、起動時間の改善が行われてきました。
2026年は、AOT Code Compilation が計画されています。 AOT Code Compilation では、JIT コンパイルを事前実行し、必要なネイティブ コードを AOT キャッシュ経由で伝達することで、アプリケーションの起動とウォームアップの高速化を目指しています。
AOT キャッシュ作成にトレーニング実行が必要だったり、GraalVM Native Image が台頭してきているので、注目度は低めですかね。
Project Loom
Project Loom は高スループットの軽量並行性と、新しいプログラミング モデルをサポートすることを目的としています。
Java 21 で正式導入された Virtual Threads に続き、2026年は構造化された並行性(Structured Concurrency)の正式リリースが見えています。 以下のように並行実行の扱いが容易になります、
try (var scope = StructuredTaskScope.open()) { Subtask<String> user = scope.fork(() -> findUser()); Subtask<Integer> order = scope.fork(() -> fetchOrder()); scope.join(); // Join subtasks, propagating exceptions // Both subtasks have succeeded, so compose their results return new Response(user.get(), order.get()); }
Structured Concurrency に続き、末尾呼び出し最適化(TCO: Tail Call Optimization) が控えています。
TCOはは、関数の末尾での呼び出しをジャンプ命令に変換することで、スタックフレームの再利用を可能にし、スタックオーバーフローを防ぎつつメモリ効率とパフォーマンスを大幅に向上させる手法です。
最近だと、Python 3.14 インタプリタに導入され、パフォーマンスが3~30%向上した。 と思ったけど、LLVM 19のバグとベンチマーク設定のエラーがあり、本当は5%だったことが判明したことが話題になりましたね。
Project Panama / Babylon
Project Panama は Javaと外部APIとの連携を強化するプロジェクトで、Project Babylon は GPUプログラミングなどをJavaで容易にするプロジェクトです。
LLM の台頭で重要度が増していますが、Project Panama の Vector API は、Project Valhalla に依存するためしばらくインキュベータ段階が続きそうです。
Project Babylon では Code Reflection のインキュベータ化を目指しています。 Code Reflection は、拡張リフレクションによるJavaコード解析により、SQL(LINQのように) や GPU カーネルなどの異種モデルに変換可能にするものです。