[Java] Get Ready for Java 9

原文はこちら。
https://blogs.oracle.com/java/get-ready-jdk9

Java 9は、今日のモノリスなJava SEプラットフォームから離れ、モジュラーシステムを導入します。下位互換性は主要な優先事項の1つであり、OracleエンジニアリングチームはJava 9へのスムーズな移行に取り組んできましたが、以下に示す、理解する必要がある重要な変更がいくつかあります。この情報を知っておくと、Java 9リリースへの準備にも役立ちます。
JDK 9
http://openjdk.java.net/projects/jdk9/
一般的な互換性ポリシーによれば、サポートされているAPIを事前の通知で削除できます。JEP 277(Enhanced Deprecation)では、通知のプロセス、APIの状態と意図された取り扱い、およびアプリケーションにおける非推奨APIの静的使用分析ツールについて説明しています。
JEP 277: Enhanced Deprecation
http://openjdk.java.net/jeps/277
JEP 260(Encapsulate Most Internal APIs)では、ほとんどのInternal APIはデフォルトでアクセスできないものの、いくつかの重要かつ幅広く使われているInternal APIは、当該APIの機能の全てもしくはそのほとんどに対応するサポート対象の代替APIができるまではアクセスできます。
JEP 260: Encapsulate Most Internal APIs
http://openjdk.java.net/jeps/260
一般的なルールとして、サポートされていないAPI(ほとんどの場合、sun.misc.Unsafeのようなsun.* API)を使うべきではありません。こうしたAPIはOracle JDKチームが利用するためのものです。Mark Reinholdが以下の動画(JVM Language Summit 2015)でsun.misc.Unsafeについて説明しています。

以下の重要なInternal APIがJDK 9でもアクセス可能にするよう提案されています。
  • sun.misc.{Signal,SignalHandler}
  • sun.misc.Unsafe (このクラスのメソッドの多くの機能はJEP 193(Variable Handles)で利用可能)
  • sun.reflect.Reflection::getCallerClass(int) (このメソッドの機能はJEP 259(Stack-Walking API)で標準的な形で提供される可能性がある)
  • sun.reflect.ReflectionFactory.newConstructorForSerialization
上記の重要なInternal APIは、jdk.unsupportedという名前のJDK固有のモジュールに配置され、パッケージがエクスポート(公開)されます。詳細はJEP 260をご覧ください。
JEP 260: Encapsulate Most Internal APIs
http://openjdk.java.net/jeps/260
プログラムでどのJDK Internal APIを使用しているかどうかを知るにはどうすればよいでしょうか。ソースコードにアクセスできる場合は、ソースコード内のパッケージ名からそれらのAPIを識別できます。場合によっては、これらのAPIの1つに依存するサードパーティライブラリを使用している可能性があるため、これは難題です。これらのAPIを特定するには、JDK 8で導入されたjdeps(Java依存性分析ツール)を使用できます。
Java Dependency Analysis Tool
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
JDK 9の早期アクセスリリースで使用できるJdepsの改良バージョンを使用する必要があります。Maven用のプラグインもあります。

jdepsコマンドを使うと、Javaクラスファイルのパッケージレベルもしくはクラスレベルの依存性がわかります。入力クラスが.classファイルへのパス名、ディレクトリ、JARファイル、もしくは全てのクラスファイルへの完全修飾クラス名にすることができます。

デフォルトで、-classpath オプションと入力ファイルで指定された全てのクラスを分析します。-jdkinternalsを使って、internal APIにフラグを立てる必要があります。詳しくは、jdepsのメインページをご覧ください。
jdeps
http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html
ツールを使うと、変更すべきJDK internal APIだけでなく、利用可能であれば置換先の提示もしてくれます。JDK internal APIの置き換え先の全リストは以下のURLからご覧いただけます。
Java Dependency Analysis Tool
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
Key links:

0 件のコメント:

コメントを投稿