[Java] An Introduction to Java 8 Compact Profiles

原文はこちら。
https://blogs.oracle.com/jtc/entry/a_first_look_at_compact

Java SEのは確かに非常にすばらしいプラットフォームですが、すべての機能が入ってくると、その結果フットプリントが大きくかつ増大します。それゆえ、コミュニティからの頻繁にあった要求の一つとして、Java SE Runtime Environmentすべてではなく、特定のアプリケーションに必要なコンポーネントのみをデプロイしたいという願望があったことは、理にかなっています。サブセットと呼ばれる、こうしたコンセプトの利点は多くあるように思えます。
  • より小さなJava環境であれば、より少ないコンピュータリソースで済み、その結果、Javaにとって以前はあまりにも粗末だと考えられていたデバイスに新しい領域が解放される
  • より小さなランタイム環境であれば性能や起動時間がより最適化できる
  • 使われていないコードを取り除くことで、常にセキュリティの観点からもお勧めできる。
  • 環境を大幅に軽くなれば、個々のJavaアプリケーションにランタイムをバンドルする上で多大なメリットがあるかもしれない。
  • これらのバンドルされたアプリケーションをもっと速くダウンロードできる
これらの知られた利点にもかかわらず、プラットフォームスチュワード(Sun、現在はOracle)は、サブセット化への抵抗は変わりませんでした​​。こうした姿勢の理論的根拠は非常に明快で、Java SEプラットフォームがはフラグメント化する、という心底からの懸念があったからなのです。同意するにせよ反対するにせよ、Java SE標準は、長年にわたり、すばらしく調和がとれています。このアサーションのさらなる証拠が必要な場合は、特に携帯電話の分野で、Java MEの状態とJava SEの状態を比較しましょう。まだましじゃないですか。それに対し、Androidはあれだけの短い期間のうちに無数のバリエーションができましたよね。
それにもかかわらず、より一層Java Platformをモジュール化するというゴールを掲げた、公式な作業が現在進行中です Project Jigsawと呼ばれ、完了時には、Java SEは、きめ細かなモジュールの集合で構成され、開発者がアプリケーションに必要なモジュールだけ識別、分離することができるようになるツールが含まれるしょう。しかし、この膨大な内部変更を実装し、しかも互換性を維持することは相当な難題であることがわかっています。そこで、Modular Java Platformの完全な実装は、Java 9まで延期されました。
Project Jigsaw
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
Java 9のリリースがかなり先になることはわかっているので、暫定的な解決策がJava 8で利用できるようになります。それはCompact Profilesと言われるものです。
JEP 161: Compact Profiles
http://openjdk.java.net/jeps/161
完全なモジュールシステムを規定するのではなく、Java 8では、開発者がデプロイに使用できるJava SEプラットフォーム仕様のサブセットプロファイルが定義されています。現時点では3個のcompact profileが定義されており、compact1、compact2、compact3という名前がついています。下表は、各プロファイルを構成するパッケージをまとめたものです。連続する各プロファイルは、その前のプロファイルの上位集合(スーパーセット)です。即ち、compact2プロファイルはcompact1内のすべてのパッケージに加え、以下compact2欄に記載されたパッケージが含まれています。同様に、comact3には、compact2のすべてのパッケージに加え、compact3欄に記載されているパッケージが含まれています。
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
compact profileを使ってどんな節約が実現できるのか、とお尋ねになるかもしれません。Java 8がリリース前の段階にあるので、時間の経過と共に数字は変わるでしょうが、ARMv5/Linux用のJava SE-Embedded 8のスナップショット早期アクセスビルドを見てみましょう。そこそこ構成されたcompact1 profileの場合、14メガバイト未満です。compact2は18メガバイト程度であり、compact3は約21メガバイトです。参考のために、最新のJava7u21 SE Embedded ARMv5/Linux環境では45メガバイト必要です。
そんなわけで、既にスペースを最適化しているJava SE Embeddedリリースの3分の1未満という状態にあり、非常に優れたランタイム環境を有しています。compact2 profileやcompact3 profileが提供する、完全版のVMと同等(もしくはそれ以上)の追加機能が必要な場合、full VMの代わりに、これらのProfileを使用してアプリケーションをデプロイすることもできます。

次回はCompact Profileの詳細を見ていきましょう。

0 件のコメント:

コメントを投稿