読者です 読者をやめる 読者になる 読者になる

Web系開発メモ

Java, SpringBoot, JavaScript, CSS, HTML などの記事を書いています。

Java:コンパクト・プロファイル

Java

Java8 で導入されたコンパクト・プロファイルについて、調べたことを書いていこうと思います。

コンパクト・プロファイルとは?

Java SE の API のサブセット(グループみたいなもの)で、compact1, compact2, compact3 の3つがあります。compact1 が一番小さくて、java.lang, java.io などのコアな API で構成されています。compact2 は 1 を含んでいて、compact3 は 2 を含んでいます。(詳細は こちら。)

メリット(Java9 に向けて)

Java9 のモジュール・システムで、JRE の rt.jar(60MB程度)は分割される可能性が高そうです。そうなると、compact1 のように少ないモジュール(API)だけを使うプログラムは、小さいランタイムで動かすことができるようになります(rt.jar の一部だけに依存するため)。

メリットとしては、起動が早くなったり、メモリ消費を抑えられたり、といったことが考えられます。

使用方法

プログラムをコンパイルするときに、-profile オプションでプロファイルを指定するみたいです。compact1 を指定する場合は、以下のようになります。

> javac -profile compact1 C1.java

C1.java

public class C1 {
  public static void main(String[] args) {
    System.out.println("Hello, World.");
  }
}

補足:コンパイルエラー

compact3 に含まれる java.lang.management を使いつつ、compact1 でコンパイルすると、次のようなエラーが発生しました。

> javac -profile compact1 C3.java
C3.java:7: エラー: ManagementFactoryはプロファイル'compact1'で使用できません
      ManagementFactory.getRuntimeMXBean().getUptime() +
      ^
エラー1個

C3.java

import java.lang.management.*;

public class C3 {
  public static void main(String[] args) {
    System.out.println(
      "JVM Uptime: " +
      ManagementFactory.getRuntimeMXBean().getUptime() +
      "ms");
  }
}

次のコマンドだと、正常にコンパイルできました。

> javac -profile compact3 C3.java

参考文献