JDK

Java 18リリース

Java 18がリリースされました。新機能は以下のようなものがアナウンスされていますが,目立った機能追加はないようです。

https://openjdk.java.net/projects/jdk/18/

  • JEP-400 UTF-8がデフォルトに
  • JEP-408 シンプルウェブサーバ
  • JEP-413 Java APIドキュメントにおけるコードスニペット
  • JEP-416 メソッドハンドルを用いたコアリフレクションの再実装
  • JEP-417 ベクターAPI(3次インキュベーター)
  • JEP-418 インターネットアドレス解決SPI
  • JEP-419 外部関数と外部メモリAPI(2次プレビュー)
  • JEP-420 switchにおけるパターンマッチング(2次プレビュー)
  • JEP-421 削除のためのfinalize()非推奨

UTF-8がデフォルトに

他の言語では既に多くがUTF-8がデフォルトになっていますが,JavaにおいてもようやくUTF-8がデフォルトのエンコーディングになったようです。Javaでテキストファイルを扱う時には毎回エンコーディングを指定していました。今後はUTF-8を用いる場合は省略できるでしょう。標準入出力は対象外となっているので,コンソールの扱いには影響はなさそうです。

シンプルウェブサーバ

SDKに簡易なウェブサーバが同梱されるようになりました。jwebserverという新たなコマンドが導入されます。静的なファイルを提供するプロトタイピング,デバッグ,テスト用のサーバと説明されています。–helpオプションでヘルプを表示させることができます。

Java APIドキュメントにおけるコードスニペット

{@snippet …} によってJavaDocコメントにJavaコードを埋め込めるようになります。

メソッドハンドルを用いたコアリフレクションの再実装

java.lang.reflectパッケージのMethod, Constructor, Fieldの実装が見直されました。43%-57%高速化されたそうです。

ベクターAPI(3次インキュベーター)

SIMD命令により効率的にベクトル演算を行うことができるAPIのようです。

インターネットアドレス解決SPI

インターネット上のアドレスを解決するためのインタフェースを提供するAPIのようです。java.net.InetAddressというクラスが提供されています。

外部関数と外部メモリAPI(2次プレビュー)

JNIに替わる新たな外部関数を呼び出すAPIです。

switchにおけるパターンマッチング(2次プレビュー)

switch文が拡張されます。当初は数値のみという制約がありましたが,オブジェクトの型によって分岐できるよう拡張され,記述方法も変更されます。従来の書き方も可能なようです。次のような書き方ができます。

private void(Object arg) {
    switch(arg) {
        case String s -> System.out.println("String");
        case int[] a -> System.out.println("Integer Array");
}

削除のためのfinalize()非推奨

finalize()メソッドが非推奨になります。GCによりオブジェクトが破棄される直前に呼び出されるのですが,GCが行われるまで実行されず,そのタイミングが制御できないため使わない方がよいと言われていました。ついに削除されます。