https://blogs.oracle.com/jtc/entry/a_first_look_at_compact
Java SEのは確かに非常にすばらしいプラットフォームですが、すべての機能が入ってくると、その結果フットプリントが大きくかつ増大します。それゆえ、コミュニティからの頻繁にあった要求の一つとして、Java SE Runtime Environmentすべてではなく、特定のアプリケーションに必要なコンポーネントのみをデプロイしたいという願望があったことは、理にかなっています。サブセットと呼ばれる、こうしたコンセプトの利点は多くあるように思えます。
- より小さなJava環境であれば、より少ないコンピュータリソースで済み、その結果、Javaにとって以前はあまりにも粗末だと考えられていたデバイスに新しい領域が解放される
- より小さなランタイム環境であれば性能や起動時間がより最適化できる
- 使われていないコードを取り除くことで、常にセキュリティの観点からもお勧めできる。
- 環境を大幅に軽くなれば、個々のJavaアプリケーションにランタイムをバンドルする上で多大なメリットがあるかもしれない。
- これらのバンドルされたアプリケーションをもっと速くダウンロードできる
それにもかかわらず、より一層Java Platformをモジュール化するというゴールを掲げた、公式な作業が現在進行中です Project Jigsawと呼ばれ、完了時には、Java SEは、きめ細かなモジュールの集合で構成され、開発者がアプリケーションに必要なモジュールだけ識別、分離することができるようになるツールが含まれるしょう。しかし、この膨大な内部変更を実装し、しかも互換性を維持することは相当な難題であることがわかっています。そこで、Modular Java Platformの完全な実装は、Java 9まで延期されました。
Project JigsawJava 9のリリースがかなり先になることはわかっているので、暫定的な解決策がJava 8で利用できるようになります。それはCompact Profilesと言われるものです。
http://openjdk.java.net/projects/jigsaw/
Project Jigsaw: Late for the train (There’s not a moment to lose! / Mark Reinhold’s Blog)
http://mreinhold.org/blog/late-for-the-train
JEP 161: Compact Profiles完全なモジュールシステムを規定するのではなく、Java 8では、開発者がデプロイに使用できるJava SEプラットフォーム仕様のサブセットプロファイルが定義されています。現時点では3個のcompact profileが定義されており、compact1、compact2、compact3という名前がついています。下表は、各プロファイルを構成するパッケージをまとめたものです。連続する各プロファイルは、その前のプロファイルの上位集合(スーパーセット)です。即ち、compact2プロファイルはcompact1内のすべてのパッケージに加え、以下compact2欄に記載されたパッケージが含まれています。同様に、comact3には、compact2のすべてのパッケージに加え、compact3欄に記載されているパッケージが含まれています。
http://openjdk.java.net/jeps/161
compact1 | compact2 | compact3 |
java.io java.lang java.lang.annotation java.lang.invoke java.lang.ref java.lang.reflect java.math java.net java.nio java.nio.channels java.nio.channels.spi java.nio.charset java.nio.charset.spi java.nio.file java.nio.file.attribute java.nio.file.spi java.security java.security.cert java.security.interfaces java.security.spec java.text java.text.spi java.util java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks java.util.jar java.util.logging java.util.regex java.util.spi java.util.zip javax.crypto javax.crypto.interfaces javax.crypto.spec javax.net javax.net.ssl javax.security.auth javax.security.auth.callback javax.security.auth.login javax.security.auth.spi javax.security.auth.x500 javax.security.cert | java.rmi java.rmi.activation java.rmi.registry java.rmi.server java.sql javax.rmi.ssl javax.sql javax.transaction javax.transaction.xa javax.xml javax.xml.datatype javax.xml.namespace javax.xml.parsers javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stax javax.xml.transform.stream javax.xml.validation javax.xml.xpath org.w3c.dom org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax org.xml.sax.ext org.xml.sax.helpers | java.lang.instrument java.lang.management java.security.acl java.util.prefs javax.annotation.processing javax.lang.model javax.lang.model.element javax.lang.model.type javax.lang.model.util javax.management javax.management.loading javax.management.modelbean javax.management.monitor javax.management.openmbean javax.management.relation javax.management.remote javax.management.remote.rmi javax.management.timer javax.naming javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi javax.script javax.security.auth.kerberos javax.security.sasl javax.sql.rowset javax.sql.rowset.serial javax.sql.rowset.spi javax.tools javax.xml.crypto javax.xml.crypto.dom javax.xml.crypto.dsig javax.xml.crypto.dsig.dom javax.xml.crypto.dsig.keyinfo javax.xml.crypto.dsig.spec org.ieft.jgss |
そんなわけで、既にスペースを最適化しているJava SE Embeddedリリースの3分の1未満という状態にあり、非常に優れたランタイム環境を有しています。compact2 profileやcompact3 profileが提供する、完全版のVMと同等(もしくはそれ以上)の追加機能が必要な場合、full VMの代わりに、これらのProfileを使用してアプリケーションをデプロイすることもできます。
次回はCompact Profileの詳細を見ていきましょう。
0 件のコメント:
コメントを投稿