マイグレーションの障壁互換性source: translating sourcefile into class filebinary: preserving the link without errorbehavioral: code semantics executes at runtime{Deperecated | Removed | Changed}による⾮互換性が⽣じるAPIsOptions, JVM behavior/stdout/stderrTools, certificates, etc...5
Migration steps1. Runyour existing application with Java 112. Compile your application with Java 113. Modularize your application8
9.
Migration steps1. Runyour existing application with Java 11 and Test2. Compile your application with Java 11 and Test3. Modularize your application9
10.
Migration steps1. Runyour existing application with Java 11 and Test2. Compile your application with Java 11 and Test3. Modularize your application10
11.
Why not "Modularize"at this timeclasspath と modulepathコストとメリットProject PortlaJDK内部はモジュール化されたのでその対応は必要11
12.
1. Run yourexisting application with Java 11Java 11で実⾏してテストが通るようにする新たにコンパイルはしない12
13.
メリット・デメリットGoodFull support forJava 8Free Flight Recorder, AppCDSTLS 1.3 + Improved securityFull support for Linux containersParallel Full GC on G1New experimental GCs: Epsilon and ZGCImproved VM performanceBadFuture migration cost for source/binary incompatibilities(Support) license changes13
Removed optionsUnrecognized option:<option>完全に削除されて存在しないためエラー(JVM起動に失敗)Ignoring option <option>; support was removed in 11.0廃⽌されたため無視される (Obsolete) ⼀覧<option> was deprecated in version 11.0 and will likely beremoved in a future release.⾮推奨で将来的に削除予定 (Deprecated) ⼀覧Invalid -Xlog optionJEP 158: Unified JVM Logging (document)Unified JVM Logging以外は基本的に代替はなく削除するしかない16
JDKモジュール化に伴うモジュールが⾒つからないエラークラスパスに含めているパッケージなのに次のエラーが出る場合は、エラーに応じて対処が必要package <package> isdeclared in module <module>, which isnot in the module graph--add-modules <module>アプリをモジュール化しない限りは基本的に出ないはずpackage <package> is declared in module <module>, whichdoes not export it...--add-exports <module>/<package>=ALL-UNNAMEDmodule <module> does not "open <package>" to the unnamedmodule--add-opens <module>/<package>=ALL-UNNAMED下2つは主にJDK Internal APIやリフレクション関係で出る26
Bye Applet, JavaWeb StartAppletおよびJava Web Startは削除された(Oracleのwhite paper)Java Web Startの代替となり得るOSSとしてはicedtea-webGetDownupdate4jが、挙げられるが検証コストやサポートとのトレードオフとなる28
しゃべくり バイトコードに関する変更例JDK-8010319: Implementationof JEP 181: Nest-Based AccessControlJDK-8157181: Compilers accept modification of final fieldsoutside initializer methodsJDK-8057919: Class.getSimpleName() should work for non-JLScompliant class names40