JJUG Night Seminar(Java16 release)

| コメント(0) | トラックバック(0)

仕事やってたら普通に参加遅れた。
オンラインセミナーもこの在宅環境下で慣れてきた感じ。

◆マークはLTS以降、見かけることになりそうだなと思ったもの。

■Java16
 (LTSは現行11 → 次回17)
 Java16で組み込まれるJEPは17個
  更新5個。内、3個が正式化
 用語:
  JEP(JDK Enhancement Proposal) 機能改善
  CSR(Compatibility & Specification Reviews)
  (非互換性を伴う変更のレビュー)
  リリースノートはこの辺の用語を気にしたほうが良い。

 試用機能
  試用版を提供することでフィードバックを得やすくする。

  言語機能:Preview
  API:Incubator
   試験的に追加されたライブラリー(モジュール)
   jdk.incubator.~パッケージ名で実装。後に正式なパッケージ名に変更される。
  JVM機能:Experimental
   と各々呼ぶ。

  明示はしてないけどPreviewは2回、3回目に正式化される慣例。
  (今回previewいれると17に間に合わないのでPreviewはなし。)


■言語仕様変更
 ・Pattern Matching for instanceof
  instanceofでパターンマッチング
  15以前必ず成り立たないものはコンパイルエラー。
  16以降は必ず成り立つものもコンパイルエラー。
   if(str instanceof Object o){}とか。
 ◆Records
  ・イミュータブルな型。暗黙的にfinal。Lombokの@Value相当。
  ・要素、コンポーネント名と同名のアクセサ、getterにはならない。
  ・自前で書くなら必ず全内部フィールドの初期化が必要。
    →カノニカル(正規)コンストラクタと呼ぶ。
     ・必ず書かないといけないなら省略できる
      →コンパクトコンストラクタ
  (QA)実装も自動生成?
    →クラスファイルに実装はかかれない。(生成されるclassに実装はない。)
    invokedynamic. JVMで実装時に実行される。
    今後はtoString()とかも最適な内部実装になる。hashcode()も。
    JVMのバージョンごとに最適な実装を提供をする。

 ・Sealed Classes(2nd preview)
  ・親クラス定義時に継承できる子クラスを限定できる
   今の所つかい道なさそう。
  ・non-sealed→ハイフン付きキーワード(予約語)が登場。今後も増えるかも。

 ・Warnings for Value-Based Classes
  primitive classを活用してインライン表現が可能なようにプログラミングモデルを強化
  (値クラス JDK8からあるValue-Based classもこれの対象にしたい)
  非互換性バリバリの変更。
  ValueBasedアノテーションが追加される
  JVM側も変更。

■API
 ・Vector API(Incubator)
  SIMD演算をJavaから使える
  Intel ハイエンドならAVX512命令サポート。これだと double(64bit)*8 が同時に演算できる。
  レイトレーシングを題材に実際に使ったら遅くなった。
  JITが効かんから?

 ・Foreign memory Access API(3rd Incubator)
  大量データを処理するためにGCで管理されないメモリを確保するAPI
  Undafeを使わず標準APIを提供する。

 ◆Stream.toList()
  →collector(Collectors.toUnmodifiableList())と書かなくて良くなった。今まではcollector経由。
   変更不可リストなのでCollectors.toList()と置き換えられない。

 ・Unix-Domain Socket(AF_UNIX) Channels
  ソケットプログラミングをもっと簡単に。

 ・Foreign Linker API (Project Panama)
  JNIをより便利に。ネイティブ実装をもっと楽に呼びたい。
  今はincubatorパッケージにある。実行時にモジュール追加が必要。

■OpenJDK
 ・Alpine Linuxで最小Docker imageを作る話
  ・musl、busybox、apk→コンパクトなLinux
  ・SpringBootで簡単なコントローラー付ける→初回961MB。コレを減らしていく。
  ・jlinkで最適化、jdepsで必要なモジュールを確認
 ・mercurial → git, GitHubに移行。

■JVM変更
 ・ZGC
  スレッドスタック処理をsafepointから並行フェーズに移行することでZGCのSTW(Stop The World)を更に減少
 ・Elasctic Metaspace
  Metaspace領域のフラグメンテーションやメモリフットプリントを改善
 ・Storongly Encapsulate JDK Internal by Default
  sun.misc.Unsafeをふくむ重要なAPIを除くJDK内部実装へのアクセスを原則不可

■ツール変更
 ・Packaging Tool
  ・JDK14で入ったjpackageが標準化
   jpackageでインストーラーを作ってユーザに提供する流れが一般的になるかもしれない。

■その他所感
 ・サンプルコード、最近はvarだからけなんだなぁ。
  TypeScript同様、右辺が明確なものはもう型を意識しないのかも。
  (実際コーディングもエディタ補完で右辺から書いて左辺みたいな感じになってるし。)

 ・recordのObject class由来のメソッドがJVMで実行される話が一番面白いと思った。
  Effective Javaで長々と解説されていたアレらをイイ感じにJVMが片付けてくれるなら願ってもないことだ。

トラックバック(0)

トラックバックURL: https://hoge.sub.jp/blog-cgi/mt/mt-tb.cgi/1718

このブログ記事について

このページは、Lyoが2021年3月17日 01:01に書いたブログ記事です。

ひとつ前のブログ記事は「趣味の洋書」です。

次のブログ記事は「自作キーボード choco60を作った」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 7.9.3