目次
JDK12で新しく導入される言語機能とAPI
きしだ氏によるJDK12で新しく導入される言語機能とAPIの紹介があった。 Qiitaの記事(Java12新機能まとめ)も交え、解説があった。 JDK12にはプログラムを書く上で大きな変更は入っていないとのこと。
swith構文の拡張
本機能はpreviw機能なので、まだ暫定とのこと。
まだ、お仕事で使わないように気を付ける必要あり。
コンパイル時に --enable-preview
を指定しなければ利用できないので、
とりあえず安心。
アロー構文でswitch分を書くことができる。
そして、 break
が不要になる。
String time = switch (weekday) { case MONDAY, FRIDAY -> "10:00-18:00"; case TUESDAY, THURSDAY -> "10:00-14:00"; default -> "休日"; };
また、 break
に返り値を設定することもできるようになりそう。
ここは、まだ揺らぐ可能性が高い。
String time = switch (weekday) { case MONDAY, FRIDAY -> { var endTime = getEndTime(); break "10:00-" + endTime; } case TUESDAY, THURSDAY -> "10:00-14:00"; default -> "休日"; };
JVM Constants API
パッケージ(java.lang.constant
)に追加された。
リフレクションで色々とやるときに便利になるとのこと。
実装時に使いそうな新機能
Collectors.teeing
- 二つのCollectorを使いたいときに利用する。
// ここのサンプルを書ききれなかった。 // String str = Stream.of("aa","bb").collect(Collectors)
String.transform
- 直観的に値を取得できるような気がする。
var address = Map.of("john","tokyo","mike","fukuoka"); var population = Map.of("tokyo", 30000000, "fukuoka", 2000000); "john".transform(addresses::get).transform(population::get)
String.indent
- インデントを入れることができる。
- マイナスの値も入れることができる。
"123\n456".indent(2) // " 123\n 456\n"
CompactNumberFormat
- ロケールに応じて、数字を丸めてくれる。
var cnf = NumberFormat.getCompactNumberInstance(); cnf.format(10000_0000); // "1億"
InputStream.skipNBytes
- 指定したバイトだけスキップすることができる。
JDK13に入りそうなもの
すべては未確定。
- Switch式の正式化
- JPackage (熱く議論されている☆彡)
- インストーラーを配布するパッケージ
- Raw String Literalsの復活
- 正直、よく分からなかった。
JDK12新機能解説
David Buck氏によるZGCの解説をいただく。
ZGCって何
JDK11以降の新しいGCの実装のこと。 A Scalable Low-Latency Garbage Collector。
複数のTBのヒープに対応でき、 10ms以下の停止時間を目指し、 チューニングが楽で、 15%以下のオーバーヘッド。
- "Z" GC
- "ZFS(Zettabyte(==1000^7 byte: 10億) File System)"
- Zettabyte != Zebibyte
ZGCの特徴
ヒープと生存データのサイズが停止時間に影響を及ぼさない。 ルート参照(ヒープの外からヒープへのアクセス)の数が停止時間に影響を及ぼす。
パフォーマンス
- メモリ128GBで2ms以下のGC Time
チューニング
-Xmx<size>
- (必要に応じて)
-XX:ConcGCThreads=<number>
ログ出力
-Xlog:gc
-Xlog:gc*
ロードマップ
- 短期
- 正式サポート
- 長期
- 世代別
- 1ms以下の停止時間
- 他のプラットフォームのサポート
- Graal JITの対応