8. Migration steps
1. Run your existing application with Java 11
2. Compile your application with Java 11
3. Modularize your application
8
9. Migration steps
1. Run your existing application with Java 11 and Test
2. Compile your application with Java 11 and Test
3. Modularize your application
9
10. Migration steps
1. Run your existing application with Java 11 and Test
2. Compile your application with Java 11 and Test
3. Modularize your application
10
11. Why not "Modularize" at this time
classpath と modulepath
コストとメリット
Project Portla
JDK内部はモジュール化されたのでその対応は必要
11
12. 1. Run your existing application with Java 11
Java 11で実⾏してテストが通るようにする
新たにコンパイルはしない
12
13. メリット・デメリット
Good
Full support for Java 8
Free Flight Recorder, AppCDS
TLS 1.3 + Improved security
Full support for Linux containers
Parallel Full GC on G1
New experimental GCs: Epsilon and ZGC
Improved VM performance
Bad
Future migration cost for source/binary incompatibilities
(Support) license changes
13
16. Removed options
Unrecognized option: <option>
完全に削除されて存在しないためエラー(JVM起動に失敗)
Ignoring option <option>; support was removed in 11.0
廃⽌されたため無視される (Obsolete) ⼀覧
<option> was deprecated in version 11.0 and will likely be
removed in a future release.
⾮推奨で将来的に削除予定 (Deprecated) ⼀覧
Invalid -Xlog option
JEP 158: Unified JVM Logging (document)
Unified JVM Logging以外は基本的に代替はなく削除するしかない
16
26. JDKモジュール化に伴うモジュールが⾒つからないエラー
クラスパスに含めているパッケージなのに次のエラーが出る場合
は、エラーに応じて対処が必要
package <package> is declared in module <module>, which is
not in the module graph
--add-modules <module>
アプリをモジュール化しない限りは基本的に出ないはず
package <package> is declared in module <module>, which
does not export it...
--add-exports <module>/<package>=ALL-UNNAMED
module <module> does not "open <package>" to the unnamed
module
--add-opens <module>/<package>=ALL-UNNAMED
下2つは主にJDK Internal APIやリフレクション関係で出る
26
35. 2. Compile your application with Java 11
Java 11でコンパイル&実⾏してテストが通るようにする
35
36. メリット・デメリット
Good
New / Improved APIs
var
Reactive streams APIs
Unmodifiable collection APIs
Improved file API, system process API
HTTP/2, Async HTTP client
Bad
Java 8のサポートが難しくなる
依存ライブラリのアップデートコストがより掛かる
実⾏環境だけではなくコンパイルとテスト環境
binary compatibilityの破壊
(Support) license changes
36
40. しゃべくり バイトコードに関する変更例
JDK-8010319: Implementation of JEP 181: Nest-Based Access
Control
JDK-8157181: Compilers accept modification of final fields
outside initializer methods
JDK-8057919: Class.getSimpleName() should work for non-JLS
compliant class names
40