Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
テックポエム 祝! JDK14 リリース
Search
koduki
March 21, 2020
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テックポエム 祝! JDK14 リリース
koduki
March 21, 2020
More Decks by koduki
See All by koduki
テックポエム そろそろ5Gについて語っておくか
koduki
1
230
テックポエマーのWeekly IT News! - 2020/09/27
koduki
0
140
テックポエマーのWeekly IT News! - 2020/09/20
koduki
0
61
テックポエマーのWeekly News! - 2020/09/13 - シリコンバレーの地殻変動
koduki
0
150
Google Cloud Next'20 総括!
koduki
0
120
テックポエマーのGoogle Cloud Next ‘20 Week 9 振り返り
koduki
0
150
テックポエマーのWeekly News! - 2020/09/06 - With コロナ
koduki
0
93
テックポエマーのGoogle Cloud Next ‘20 Week 8 振り返り
koduki
0
130
Google Cloud Next '20 Weekly 7の振り返り
koduki
0
160
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
380
We Have a Design System, Now What?
morganepeng
55
8.2k
Producing Creativity
orderedlist
PRO
348
40k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Mobile First: as difficult as doing things right
swwweet
225
10k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
270
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Making the Leap to Tech Lead
cromwellryan
135
10k
Exploring anti-patterns in Rails
aemeredith
3
450
Transcript
祝! JDK14 リリース テックポエム
TL;DR JDK14が無事にリリース。LTSの17に向けての下準備多数 RecordやPattern Matching、Text Blocks がプレビューながら追加 JFR
Stream API, Switch式など新APIや構文も追加 ZGCのWin/Macサポート、CMSの廃止などGC周りの改修もあり 詳しくはきしださんのJava 14新機能まとめ参照 https://qiita.com/nowokay/items/ec85d97a7cecaaac8123 一応言っておくけど、今もJavaは無料で使えます
予定通りの半年に1度のバージョンアップ Ref: https://www.oracle.com/technetwork/jp/articles/java/ja-topics/jdk-release-model-4487660-ja.html
JEP359: Record型(previw)が登場! Scalaのcase class, KotlinのData Classesみたいなの Immutableなデータ型
Java Beansの冗長な書き方からついに解放 たぶんJavaが批判される筆頭的な部分だった Lombok, IDEで生成, public field使う, 心を無にするなど 様々な対策 ただし、previewなのですぐプロダクションで使える わけではない。コンパイラと実行に--enable-preview を付ける必要がある
Java Bean public class Person { private String name; private
int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person[" + "name=" + name + ", age=" + age + ']'; } @Override public int hashCode() { int hash = 7; hash = 47 * hash + Objects.hashCode(this.name); hash = 47 * hash + this.age; return hash; } @Override public boolean equals(Object obj) {….} }
Record型(preview) public record Person(String name, int age) {}
Record型の特徴 超短い! コンストラクタの拡張等は出来る TupleのようにLambdaの戻り値として使い捨ての生成は出 来ない IImmutableな型しか作れず、アクセッサもgetXXではなく
xx()なので単純なJava Beanの置き換えではない Int定数に対するenum型のように用途を明確にした型だと いう理解が良いかも JavaBeanと互換性はないので、JPAとかJAX-RSとかの対応 はこれからと思われる
368: Text Blocks (Second Preview) “”“で括ることで複数行書ける。 インデントは一番浅いところが基準でそれ以降はスペース
変数埋め込みはformattedメソッドで行う var str = """ こんにちは、%sさん。 今日も Happy Hacking! """.formatted("紅月"); str ==> “こんにちは、紅月さん。¥n 今日も¥nHappy Hacking!¥n"
JEP305: Pattern Matching(Preview) 端的に言えば型判定と同時に代入が出来る構文。関数型言語では 便利に活用 If文だと正直嬉しさが少ないのでswitchに対応したJEP 375に期待
入れ子のレコードとか解析できるようになると捗る if (obj instanceof String s) { // can use s here } else { // can't use s here } if (!(obj instanceof String s)) { .. s.contains(..) .. } else { .. s.contains(..) .. }
JEP361: Switch Expressions (Standard) 12, 13でプレビューとして入っていたSwitch式が正式に。 breakが不要だったり、同値を固めたり出来てシンプルな構文に
戻り値はyieldだが省略は可能 なぜかNetBeans11.3で動かす場合はNetBeans自体をJDK14で動か さないとシンタックスエラーになるので注意 #そうしないと14の コンパイラ機能が使えない模様
JEP361: Switch Expressions (Standard) int fib(int n) { int r;
switch (n) { case 1: case 2: r = 1; break; default: r = fib(n - 1) + fib(n - 2); break; } return r; } int fib(int n) { return switch (n) { case 1, 2 -> 1; default -> fib(n - 1) + fib(n - 2); }; }
JEP349: JFR Event Streaming JDK Flight Recorderがファイルだけではなく、ストリームイベント として実行できるように。
基本的には問題発生してPGが落ちたときのBlackBox分析に有用 だったJFRがモニタリングにも活用できるように カスタムイベントも問題なく利用可能。 ログに吐いたり、Kafka等に直で投げたり、MP Profileと連携が主な 利用イメージ。
JEP349: JFR Event Streaming public static void main(String[] args) throws
IOException { CompletableFuture.runAsync(() -> { while (true) { try { var event = new SampleCustomEvent2(); event.begin(); event.myproperty = "Hello, " + System.currentTimeMillis(); event.commit(); Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(ExampleStreamJFR.class.getName()).log(Level.SEVERE, null, ex); } } }); try (var rs = new RecordingStream()) { rs.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1)); rs.onEvent("jdk.CPULoad", System.out::println); rs.onEvent(SampleCustomEvent2.class.getName(), (event) -> { System.err.println("my event:" + event.getString("myproperty")); }); rs.start(); } }
JEP349: JFR Event Streaming @Category({"Application Profile"}) @Label("Sample") public static class
SampleCustomEvent2 extends Event { @Label("Sample Property") String myproperty; } my event:Hello, 1584846088763 jdk.CPULoad { startTime = 19:01:29.680 jvmUser = 0.00% jvmSystem = 0.37% machineTotal = 3.87% } …. 実行結果:
その他JVMの主なアップデート 358: Helpful NullPointerExceptions 370: Foreign-Memory Access API
(Incubator) 364: ZGC on macOS / 365: ZGC on Windows 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector 366: Deprecate the ParallelScavenge + SerialOld GC Combination 345: NUMA-Aware Memory Allocation for G1 Shenandoah GC向けの改修を細々と
どうやって入れるの? こだわりが無ければLinuxやクラウドなら環境標準でOK WindowsやMacに入れる場合はLiberica JDKとかで良いと思う https://bell-sw.com/pages/java-14/ Oracle JDKとOpen
JDKは今は同じコードベース (問合せ対応がしたい等の)サポート入れなければ無料です 詳しく知りたい人はソムリエの資料を読みましょう https://www.slideshare.net/TakahiroYamada3/jdk- winery-tour-20191026-sfggjp-javajo
まとめ 今回はホップ, ステップ, ジャンプのステップ感が強い。 基本的にはプレビューがメインだし運用環境に急いでインストールす るメリットは比較的小さい ただし、監視にJFRを活用したい人は積極的に入れよう!
ライブラリ等を作ってる人はプレビュー版から特にRecord型の感触を つかむと良いかも いずれにしてもJavaがどんどん使いやすくなってるのが分かって良い