せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

JJUGナイトセミナー「JDK 11リリース記念:今知っておくべきJDK 11の重要ポイント」に行ってきたメモ

最初に

↓を必ず読もう

Javaは今も無償です

JDK 11リリースなので改めて「新しいJDKリリースモデル解説(サマリー&アップデート)」 by 伊藤 敬さん

スライドは↓↓↓

JDK: 新しいリリースモデル解説(ver.2.1)

Oracle JDK

  • 前々からアナウンスされていた商用ライセンス版
    • だけじゃなく、社内もしくは個人での開発・テスト・デモであれば無償利用可能(OTNLAライセンス)
  • OTNからダウンロードできる
  • OTNLAライセンス版も3年間のアップデートが提供される(・・・かもしれない)
    • まだ検討中
  • 商用ライセンスを個人で買う手段は現在用意中

Oracle OpenJDK

  • OracleがビルドしたOpenJDK
  • LTSなし。商用ライセンスもなし
  • Java 8までと同じライセンス

その他

  • 10/16に11.0.1がリリース予定
  • リリース情報はこれからもOpenJDK
    • リリースドキュメントはしっかり見て!!

Java 11 : サポートとVM機能 編 by 久保田 祐史さん

スライドは↓

Introduction to Java 11: Support and JVM Features #jjug

Java11のサポートとJVMについて

  • サポートは開発サポート、配信サポート、問い合わせサポートの3つ。
  • 無償で使いたい人の結論はAdoptOpenJDKからダウンロード。最低4年間の配信サポートが得られる。

  • OpenJDKのメンテナンスリードOracleが務める

    • でも、Java 6のようにOracleが辞めた後、Redhat等が引き継いでサポートを続ける可能性はある。
  • Oracle JDKからOpenJDKの乗り換えは比較的簡単だけど、証明書が若干ネックになるかも

    • ライセンスの関係等でOracle JDKに含まれていた証明書が入っていない可能性
    • OpenJDKを自分でビルドすると空っぽ
  • Java8のサポートが切れるまでにはJava11に移行する

    • ただし、Java 8の有償サポートを受けてる人は2025年まで有効。なので、Java 11ではなく、Java17(次のLTS。2021/9)まで引っ張る選択肢もある
  • 4年以上のバイナリ配信サポートが欲しければ有償サポートしかない

    • 外にサポートを求めてもエース級がくるとは限らない。あえてサポートを受けず、組織内でエースを育てるのもあり。

JVM

JEP 330: Launch Single-File Source-Code Programs

Javaファイルを直接実行できる。例えば、java Hoge.javaで実行できる。

  • メインメソッドと1ファイルで完結するという制約あり
  • Javaソースをスクリプト化できる。これが本当のJavaScript!
JEP 328: Flight Recorder

もともとJava Flight Recorderだったが、Javaが商標に引っかかるからFlight Recorderになった
ツールじゃなくてJREに組み込まれている

JEP 318: Epsilon: A No-Op Garbage Collector

Epsilon GC。何もしないGC。まだ試用版。

メモリ監視とか行わない。なので、何も考えずに使うとOOEMが起こる。
研究や開発で使うのを想定。JITの効果測定とか(GCが邪魔しない)

JEP 333: ZGC: A Scalable Low-Latency Garbage Collector

Java11では試用版のポーズレスGC。世代別GCではないので、色々変わる。
64bit、Linux限定。
今後、クラスアンロード周りを始め、修正がガンガン入ってくる。
また、運用するためには、LinuxのLargePageとNUMA周りも気にしないとダメ。

Java 11:APIの変更点 編 by きしだなおきさん

Nestedクラスのアクセス制御

public、protected、default、private以外の5つ目のアクセス制御。ネストクラス間のprivateメンバーアクセス。
今まではコンパイルすると別クラスになるので、アクセス用のメソッドが生成されていた。
Nest Mate APIでアクセスできる

Dynamic Class Costants

Classfileフォーマットの拡張。言語やコンパイラの実装自由度、クラス読み込みが早くなる(定数の遅延実行)
Java 11ではコンパイラが未対応(?)
将来的にはstatic finalの定数とかも対象に含めたい。

Java EEとCORBAモジュールの削除

JAX-WSとかJAXBとかはMavenでライブラリ取ってくる必要あり。 CORBAはメンテナンスできる人がいなくなった?(まぁ、使ってる方がレアだし・・・?)

HTTPクライアント

Java9で入っていたHTTPクライアントがスタンダードに。
HTTP2、Reactive対応。

varの拡張

varがLambdaでも使えるように。Lambda内でアノテーションをつけるときに便利。

APIの追加

StringにisBlank、strip(全角空白対応のtrim)、Charactor.toStringにintパラメーター(キャスト不要になった)

FilesにReadString,WriteStringが追加され、小さいコードを書く時便利になった。
nullReader,nullWriterは/dev/nullみたいなもの
Path.ofはインターフェースにofメソッドを追加するという最近の流行りに追従。

Collections.toArrayにintFunctionを指定できるようになった
toArray(String[]::new)のように書ける

Streamのfilterでnotが書きやすくなった
文字列が空「じゃない」フィルターでもメソッド参照がつかえる

Thread.destroyとかstopとか削除されたAPIがある

ArrayIndexOutOfBoundsExceptionのメッセージがわかりやすくなった

JapaneseDateの新元号対応。NewEraとして入ってる
新しい元号は、12.0.1(4/25)に反映される予定

Timソートのバグが直った
静的解析ツールKeYで検出

QA

Q:Java 11でJAX-WSやJAX-Bがなくなった背景は?
A:削除の背景は開発速度の違い。Java EEの変更をSEに入れるのが大変。また、Jackarta EEになってパッケージが変わるという理由もある。

Q:年号を起動時に指定できる? A:Enumだからできない。

JJUGからの案内

来月はナイトセミナーだけでなく、OracleCodeOneの報告会を予定。12月はJJUG CCC。
立て続けにイベントがあるのでみんな来てね。

修正メモ

  • スライド追加
  • JDK 11.0.1のリリース日が間違ってたので修正