BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GraalVM 19.3リリースがJDK 11をサポート

GraalVM 19.3リリースがJDK 11をサポート

原文(投稿日:2019/11/24)へのリンク

JavaやC、Python、JavaScriptなど、複数の言語で記述されたアプリケーションを実行するための共有ランタイムを提供する多言語仮想マシンのGraalVMが、JDK 11をサポートするバージョン19.3をリリースした。これまでのGraalVMは、JDK 8をベースとしていた。

Java 9リリースからJava 11リリースの間に提供されていた、コンパクト文字列(compact strings)変数の型推測Java Platform Module System(JPMS)、HTTPクライアントなど、言語機能とプラットフォームの数多くの改善が、GraalVMで開発sれたJVMアプリケーションでも使用できるようになる。

例えば、次のスニペットでは、bitcoin REST APIへの簡単な要求を構築して、新しいJava 11 HTTPクライアントを使って実行する方法を示している。

public class BPI {
  public static void main(String... args) {
    var request = HttpRequest
        .newBuilder()
        .uri(URI.create("https://api.coindesk.com/v1/bpi/currentprice.json"))
        .GET()
        .build();

    var response = HttpClient
        .newHttpClient()
        .send(request, HttpResponse.BodyHandlers.ofInputStream());

    var json = Json
        .createReader(response.body())
        .readObject()
        .getJsonObject("bpi");
    …
    System.out.printf("Current Bitcoin Price: $%s %s", price, indicator);
  }
}

JAVA_HOMEPATHをGraalVMインストールを示すように設定することで、上例のクラスのようなJava 11ベースのクラスのjavacによるコンパイルや、Mavenなどのツールによるビルドが可能になる。

GraalVMのネイティブイメージ生成ユーティリティも同時にアップデートされて、アーリアダプタ向けのテクノロジ機能としてJava 11をサポートするようになった。ネイティブイメージは、事前(ahead-of-time)コンパイルされたJavaバイトコードを、スタンドアロンの実行ファイルとしてパッケージしたもので、一般的にはスタートアップ時間の短縮やフットプリントの縮小が実現される。ただしネイティブイメージでは、Java Platform Moduleや、イメージ実行時のモジュールイントロスペクションがサポートされない点に注意する必要がある。native-imageユーティリティはオプションパッケージで、GraalVM Updaterのguを使用してインストールすることができる。guは、GraalVMのコアディストリビューションに含まれないパッケージのダウンロードとインストールを行うための、パッケージマネージャである。

以下のスニペットでは、GraalVM native-imageユーティリティをダウンロードして、上記の例で述べたクラスからネイティブイメージを構築して、生成されたスタンドアロン実行可能ファイルを起動する手順を示している。

gu install native-image

native-image -cp example.jar \
  --enable-url-protocols=https \
  my.example.BPI

GraalVMネイティブイメージ例の実行結果

ビルドツールとしてMavenを使用する場合のために、イメージ生成プロセスをアシストするMavenプラグインが提供されている。

Java 11ではGarbage-First(G1)ガベージコレクタがデフォルトであるため、パフォーマンスの重要なアプリケーションを、JDK 8ベースのGraalVMからJDK 11ベースへ移行する場合には、特別な配慮が求められる。この点にも注意が必要だ。

JDK 11サポートの他にも、GraalVM初となる今回の長期サポート(LTS)リリースでは、ネイティブイメージ生成、GraalVMコンパイラ、コードカバレッジ、GraalVM VisualVMなどのツーリングが改善され、NodeJSやPython、R言語のランタイムがアップグレードされている。リリースノートには、GraalVM 19.3リリースで提供される改善と拡張の完全なリストが掲載されている。

リソース

この記事に星をつける

おすすめ度
スタイル

BT