Submit Search
JavaOne2015報告またはこれからのJava
8 likes
3,128 views
なおき きしだ
JavaOne2015の報告資料。Java SE 9/Java EE 8まとめ
Software
Read more
1 of 68
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
More Related Content
What's hot
(20)
PDF
Jvm internal
Go Tanaka
ODP
スレッドダンプの読み方
Funato Takashi
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
PPTX
Heap statsfx analyzer
Yasumasa Suenaga
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
PPTX
第六回渋谷Java Java8のJVM監視を考える
chonaso
PDF
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
PDF
Hls friends 20161122.key
Takefumi MIYOSHI
PDF
JVMの中身を可視化してみた
Kengo Toda
PDF
講座Java入門
Tokai University
PDF
キメるClojure
Yoshitaka Kawashima
PDF
Introduction to JShell #JavaDayTokyo #jdt_jshell
bitter_fox
PDF
Groovyで楽にSQLを実行してみよう
Akira Shimosako
PDF
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
PDF
MySQL日本語利用徹底入門
Mikiya Okuno
PPTX
JavaでインメモリSQLエンジンを作ってみた
JustSystems Corporation
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
PDF
Jbatch実践入門 #jdt2015
Norito Agetsuma
PDF
MySQLを割と一人で300台管理する技術
yoku0825
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
Jvm internal
Go Tanaka
スレッドダンプの読み方
Funato Takashi
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
Heap statsfx analyzer
Yasumasa Suenaga
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
第六回渋谷Java Java8のJVM監視を考える
chonaso
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
Hls friends 20161122.key
Takefumi MIYOSHI
JVMの中身を可視化してみた
Kengo Toda
講座Java入門
Tokai University
キメるClojure
Yoshitaka Kawashima
Introduction to JShell #JavaDayTokyo #jdt_jshell
bitter_fox
Groovyで楽にSQLを実行してみよう
Akira Shimosako
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
MySQL日本語利用徹底入門
Mikiya Okuno
JavaでインメモリSQLエンジンを作ってみた
JustSystems Corporation
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Jbatch実践入門 #jdt2015
Norito Agetsuma
MySQLを割と一人で300台管理する技術
yoku0825
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
Viewers also liked
(16)
PDF
JavaOne2016報告
なおき きしだ
PDF
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
PPTX
乱数のたのしい話
なおき きしだ
PPTX
人工知能に何ができないか
なおき きしだ
PDF
Javaプログラミング入門
なおき きしだ
PPTX
ぼくの実装した最弱のディープラーニング
なおき きしだ
PDF
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
なおき きしだ
PDF
Java 9 preview
Ivan Krylov
PDF
勉強会に参加しないと不幸になる話
なおき きしだ
PDF
職業人講和20141007
なおき きしだ
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
PDF
JDK9 Features (Summary, 31/Jul/2015) #JJUG
Yuji Kubota
PDF
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
PDF
オブジェクト指向やめましょう
なおき きしだ
PDF
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
PDF
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
JavaOne2016報告
なおき きしだ
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
乱数のたのしい話
なおき きしだ
人工知能に何ができないか
なおき きしだ
Javaプログラミング入門
なおき きしだ
ぼくの実装した最弱のディープラーニング
なおき きしだ
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
なおき きしだ
Java 9 preview
Ivan Krylov
勉強会に参加しないと不幸になる話
なおき きしだ
職業人講和20141007
なおき きしだ
Java SE 8 lambdaで変わる プログラミングスタイル
なおき きしだ
JDK9 Features (Summary, 31/Jul/2015) #JJUG
Yuji Kubota
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
オブジェクト指向やめましょう
なおき きしだ
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
Ad
Similar to JavaOne2015報告またはこれからのJava
(20)
PPTX
Java EE8 Report
Norito Agetsuma
KEY
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
PDF
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
PPTX
福井イベント
Yoshio Terada
PDF
Java scriptの進化
maruyama097
PDF
Spring3.1概要x di
Yuichi Hasegawa
PDF
今年はJava進化の年!今知っておくべき新しいJava
Takashi Ito
PDF
20161111 java one2016-feedback
Takashi Ito
PDF
Java EE 再入門
minazou67
PDF
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
PDF
Spring framework
Toru Takefusa
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Kazuya Sugimoto
PDF
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
PPTX
JavaOne 2016 Report for Java EE
Yoshio Terada
PDF
20161119 java one-feedback_osaka
Takashi Ito
PDF
大規模なギョームシステムにHaxeを採用してみた話
terurou
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
PDF
Jakarta EE 9 と これから
Kenji Kazumura
PDF
Head toward Java 15 and Java 16
Yuji Kubota
ODP
ホット・トピック・セミナー「Metro」
Kohsuke Kawaguchi
Java EE8 Report
Norito Agetsuma
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
福井イベント
Yoshio Terada
Java scriptの進化
maruyama097
Spring3.1概要x di
Yuichi Hasegawa
今年はJava進化の年!今知っておくべき新しいJava
Takashi Ito
20161111 java one2016-feedback
Takashi Ito
Java EE 再入門
minazou67
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
Spring framework
Toru Takefusa
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Kazuya Sugimoto
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
JavaOne 2016 Report for Java EE
Yoshio Terada
20161119 java one-feedback_osaka
Takashi Ito
大規模なギョームシステムにHaxeを採用してみた話
terurou
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
Jakarta EE 9 と これから
Kenji Kazumura
Head toward Java 15 and Java 16
Yuji Kubota
ホット・トピック・セミナー「Metro」
Kohsuke Kawaguchi
Ad
More from なおき きしだ
(19)
PDF
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
PDF
GraalVM at Fukuoka LT
なおき きしだ
PDF
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
なおき きしだ
PDF
GraalVMについて
なおき きしだ
PDF
VRカメラが楽しいのでブラウザで見たくなった話
なおき きしだ
PDF
最近のJava事情
なおき きしだ
PDF
怖いコードの話 2018/7/18
なおき きしだ
PDF
Java新機能観察日記 - JJUGナイトセミナー
なおき きしだ
PDF
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
なおき きしだ
PDF
これからのコンピューティングの変化とこれからのプログラミング at 広島
なおき きしだ
PDF
Summary of JDK10 and What will come into JDK11
なおき きしだ
PDF
Summary of JDK10 and What will come into JDK11
なおき きしだ
PDF
Java10 and Java11 at JJUG CCC 2018 Spr
なおき きしだ
PPTX
New thing in JDK10 even that scala-er should know
なおき きしだ
PPTX
Java Release Model (on Scala Matsuri)
なおき きしだ
PDF
これからのJava言語と実行環境
なおき きしだ
PDF
JavaOne報告2017
なおき きしだ
PDF
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
PDF
GPUをJavaで使う話(Java Casual Talks #1)
なおき きしだ
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
GraalVM at Fukuoka LT
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
なおき きしだ
GraalVMについて
なおき きしだ
VRカメラが楽しいのでブラウザで見たくなった話
なおき きしだ
最近のJava事情
なおき きしだ
怖いコードの話 2018/7/18
なおき きしだ
Java新機能観察日記 - JJUGナイトセミナー
なおき きしだ
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング at 広島
なおき きしだ
Summary of JDK10 and What will come into JDK11
なおき きしだ
Summary of JDK10 and What will come into JDK11
なおき きしだ
Java10 and Java11 at JJUG CCC 2018 Spr
なおき きしだ
New thing in JDK10 even that scala-er should know
なおき きしだ
Java Release Model (on Scala Matsuri)
なおき きしだ
これからのJava言語と実行環境
なおき きしだ
JavaOne報告2017
なおき きしだ
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
GPUをJavaで使う話(Java Casual Talks #1)
なおき きしだ
JavaOne2015報告またはこれからのJava
1.
JavaOne2015報告 またはこれからのJava 2015年12月16日 きしだ なおき
2.
今日のおはなし ● Javaの基本用語 ● Java
SE 9 ● Java EE 8
3.
Javaの基本用語 ● Java SE ●
Java EE ● JDK ● OpenJDK ● JSR ● JEP
4.
Java SE ● Java
Standard Edition ● Javaプラットフォームの仕様 – Java実行環境 – バイトコード – 言語仕様 – 標準ライブラリ – GUI
5.
Java EE ● Java
Enterprise Edition ● サーバー向けライブラリ仕様 – Web – トランザクション – セキュリティ – メッセージング – 管理機能
6.
JDK ● Java Development
Kit ● OracleのJava実装 – コンパイラ、VM、API、その他ツール ● Java SEは仕様、JDKは実装 – ただし、JDKのどこまでがJava SE仕様かはあいまい – JavaFXはJava SEに含まれる?
7.
OpenJDK ● オープンソースで開発されるJDK ● 現在のJava
SEはOpenJDKとして機能が実装さ れる ● クラスパス例外付GPL v2 – 標準APIに依存するソースコードにGPLが 波及しない
8.
JEP ● JDK Enhancement
Proposal ● JDK改善提案 ● JDKはJEPの集まり
9.
JSR ● Java Specification
Request ● Javaの標準仕様 ● Specification Leadsを中心に、Expert Groupが作業を行う ● Java EEはJSRの集まり – Java EE自体JSRで定義されている ● 例 – JSR-310 Date and Time API – JSR-366 Java Platform, Enterprise Edition 8 Specification
10.
Java SE 9 ●
ロードマップ ● REPL ● JavaDoc ● 言語の変更 ● ライブラリの小変更 ● Flow API ● HttpClient ● Module ● Unsafe ● 実行環境 ● 画像処理
11.
Java SE 9
ロードマップ ● 2016/05/26 Feature Complete ● 2016/09/01 Rampdown Start ● 2017/01/26 Final Release Candidate ● 2017/03/23 General Availability
12.
REPL(Read-Eval-Print Loop) ● JShellコマンド ●
学習のハードルをさげる ● メソッドの試行を楽に – IDEが対応すれば、書いてすぐ試せる
13.
JavaDoc ● HTML5対応 ● 検索
14.
言語の変更 ● 匿名クラスでのダイアモンド推論 ● try-with-resource前の初期化
15.
匿名クラスでのダイアモンド推論 ● 匿名クラスでもダイアモンド演算子が使える ようになる Map<String, String>
params = new HashMap<String, String>(){ { put(“a”, “123”); put(“b”, “456”); } } Map<String, String> params = new HashMap<>(){ { put(“a”, “123”); put(“b”, “456”); } }
16.
try-with-resource前の初期化 ● try-with-resourceの前で初期化が可能 final Resource
r = new Resource(); try(r){ ... } use(r); final Resource r = new Resource(); try(Resource r2 = r){ ... } use(r);
17.
ライブラリの変更 ● Stream ● Optional.stream() ●
コレクションのBuilder
18.
Streamの変更 ● Stream.takeWhile ● Stream.dropWhile ●
Stream.ofNullable
19.
Optional.stream() ● Optional.stream() Stream.of( Optional.of(“aa”), Optional.empty(), Optional.of(“bb”)) .flatMap(Optional::stream) .collect(Collectors.toList());
20.
コレクションのBuilder ● List – List.of(e1,
e2, e3, ...) ● Set – Set.of(e1, e2, e3, ...) ● Map – Map.of(k1, v1, k2, v2, k3, v3, ...) – Map.of(entity(k1, v1), entity(k2, v2), ...)
21.
コレクションのBuilderの注意 ● 実装はprivate ● immutable ●
nullは入れられない ● setやmapのキーで重複があると例外 ● setやmapの順序は不定 ● メモリ効率のよい実装
22.
Flow API ● JEP
266 ● Reactive Stream ● Push Style API – CompletableFuture ・・・ continuation-style – Stream ・・・ pull-style ● java.util.concurrent.Flow – Publisher/Subscriber/Processor/Subscription
23.
HttpClient ● HTTP/2対応 ● java.net.httpパッケージ ●
シンプルなAPI – HttpClient/HttpRequest/HttpResponse
24.
HttpURLConnection ● 複数プロトコルに対応したURLConnectionの 一種だった – FTP/GOPHER... ●
抽象的すぎて使うのが面倒 ● HTTP/1.1に対応
25.
HTTP/2 ● HTTP/1.1の拡張 ● SPDYをベース ●
1つのコネクションで複数のリクエスト ● サーバーPush ● ヘッダ圧縮
26.
基本的な使い方 HttpResponse resp =
HttpRequest .create(new URI(“http://www.example.com/”)) .GET() .response(); if(resp.statusCode() == 200){ String responseBody = resp.body(HttpResponse.asString()); System.out.println(responseBody); }
27.
レスポンス処理 ● HttpResponse.asString() ● HttpResponse.asFile(path) ●
HttpResponse.asByteArray()
28.
POST HttpResponse resp =
HttpRequest .create(new URI(“http://www.example.com/”)) .body(HttpRequest.fromString(“param1=1,param2=2”)) .POST() .response()
29.
POSTデータ ● fromString() ● fromFile(path) ●
fromInputStream(input) ● fromByteArray(data)
30.
非同期リクエスト ● CompletableFuture CompletableFuture<HttpResponse> cf
= HttpRequest.create(uri) .GET() .responseAsync(); HttpResponse resp = cf.join();
31.
CompletableFuture HttpRequest.create(uri) .GET() .responseAsync(); .thenApplyAsync((HttpResponse resp) ->
{ if(resp.statusCode() = 200){ return resp.body(asFile(path)); }else { throw new SomeException(); } }); // output is CompletableFuture<Path>
32.
サーバーPush CompletableFuture<Map<URI, PATH>> cf
= HttpRequest.create(uri) .version(Version.HTTP_2) .GET() .multiResponseAsync( HttpResponse.multiFile(“/usr/dest”); Map<URI, Path> results = cf.join();
33.
Module ● Project Jigsaw ●
モジュール定義 ● JDKのモジュール分解
34.
これまでのJavaの構造 ● package – class
& interface ● field & method
35.
Javaの構造 ● module – package ●
class & interface – field & method
36.
今までの可視性 ● public ● protected ●
<package> ● private
37.
これからの可視性 ● すべてに対してpublic ● 特定のモジュールに対してpublic ●
モジュール内でpublic ● protected ● <package> ● private
38.
モジュール定義 ● module-info.java // src/kishida/util/module-info.java module
kishida.util { exports kishida.util; } kishida.util ○kishida.util ×kishida.util.internal
39.
依存 ● requires module kishida.util
{ exports kishida.util; } kishida.util module kishida.app { requires kishida.util; } kishida.app
40.
依存の伝播 ● 孫依存のモジュール module kishida.util
{ exports kishida.util; requires kishida.logging; } module kishida.app { requires kishida.util; requires kishida.logging; } module kishida.logging { exports kishida.logging; } 面倒
41.
依存の伝播 ● requires public module
kishida.util { exports kishida.util; requires public kishida.logging; } module kishida.app { requires kishida.util; } module kishida.logging { exports kishida.logging; }
42.
リフレクション ● setAccessible(true)も効かない
43.
Unsafe ● sun.misc.Unsafe ● メモリの直接アクセスなどを行う ●
モジュール化で行き所がなくなる
44.
Unsafe 利用例 Unsafe 並列化プリミティブ Unsafe.compareAndSwap* シリアライズ
Unsafe.allocateInstance メモリ管理 Unsafe.allocate/freeMemory JVM外とのやりとり Unsafe.get*/set*
45.
Unsafeを利用している製品 ● Cassandra/Ehcache/HBase/Hadoop Hibernate/JRuby/Netty/Scala/Spring...
46.
Unsafeの廃止 ● Java 9でメンテナンス停止 ●
Java $N-1で完全置き換え、Deprecate ● Java $Nで廃止
47.
Unsafeの代替 利用例 代替 並列化プリミティブ JEP
193 Variable Handles シリアライズ JEP 187 Serialization メモリ管理 Project Panama Project Valhalla Arrays 2.0 JVM外とのやりとり Project Panama JEP 191 FFI
48.
実行環境 ● G1GCのデフォルト化 ● ログフォーマットの統一
49.
画像処理 ● マルチ解像度対応のImage ● フォントレンダリングの変更
50.
Java EE 8 ●
ロードマップ ● Servlet 4.0(JSR 369) ● CDI 2.0(JSR 365) ● JAX-RS 2.1(JSR 370) ● MVC 1.0(JSR 371) ● JSON – JSON Binding 1.0(JSR 367) – JSON-P 1.1(JSR 374)
51.
Java EE 8
ロードマップ ● 2015 Q4 Early Draft ● 2016 Q1 Public Review ● 2016 Q3 Proposed Final Draft ● 2017 H1 Final Release
52.
Servlet 4.0(JSR 369) ●
HTTP/2対応 ● リクエスト・レスポンス多重化 ● ストリームの優先順位 ● サーバーPush
53.
CDI 2.0(JSR 365) ●
CDI for Java SE ● モジュール化 ● 非同期イベント
54.
CDI for Java
SE CDIProvider provider = CDI.getCDIProvider(); CDI<Object> cdi = provider.initialize(); MyBean bean = cdi.select(MyBean.class).get(); bean.some(); cdi.shutdown(); ● Java SEでもCDIを ● テストが容易に
55.
モジュール化 ● CDI light –
Basic DI – Producers ● Full CDI – light – Events – Interceptor & Decorator
56.
4つのモジュール ● CDI light
for Java SE ● CDI full for Java SE ● CDI light for Java EE ● CDI full for Java EE
57.
非同期イベント @Inject Event<Payload> event; public void
someLogic() { event.fireAync(new Payload()); }
58.
JAX-RS 2.1(JSR 370) ●
HTTP/2対応 ● Server Sent Event(SSE)
59.
MVC 1.0(JSR 371) ●
アクションベース ● JAX-RSをベースに @Path(“hello”) public class HelloController{ @GET @Controller public String hello(){ someProc(); return “hello.jsp”; } }
60.
JSON ● JSON Binding(JSON-B/JSR
367) ● JSON Processing(JSON-P/JSR 374)
61.
JSON Binding 1.0(JSR
367) ● JavaオブジェクトとJSONのバインディング ● JsonBuilder Person p = new Person(); p.setName(“きしだ”); p.setAddress(“ふくおか”); p.setTwitter(“@kis”); Jsonb jsonb = JsonbBuilder.create(); jsonb.toJson(p, System.out);
62.
JSON-P 1.1(JSR 374) ●
JsonObjectやJsonArrayの操作 – JSON Pointer – JSON Patch ● Java 8 Streamへの対応
63.
JSONの構築 ● createObjectBuilder ● createArrayBuilder JsonArray
contacts=Json.createArrayBuilder() .add(Json.createObjectBuilder() .add("name","Duke") .add("gender","M") .add("phones",Json.createObjectBuilder() .add("home","650-123-4567") .add("mobile","650-234-5678"))) .add(Json.createObjectBuilder() .add("name","Jane") .add("gender","F") .add("phones",Json.createObjectBuilder() .add("mobile","707-555-9999"))) .build();
64.
JSON Pointer ● RFC
6901 [ { "name":"Duke", "gender":"M", "phones":{ "home":"650-123-4567", "mobile":"650-555-1212"}}, { "name":"Jane", "gender":"F", "phones":{ "mobile":"707-555-9999"}} ] JsonPointer p = new JsonPointer("/0/phones/mobile"); contacts = p.replace(contacts, "650-555-1212");
65.
JSON Patch ● RFC
6902 ● add, replace, remove, mode, copy, test ● PatchはJSONで記述 [ { “op”:”replace”, “path”:”/0/phones/modile”, “value”:”650-111-2222” }, { “op”:”remove”, “path”:”/1” } ]
66.
JsonPatchBuilder JsonPatchBuilder builder =
new JsonPatchBuilder(); JsonArray patch = builder.replace("0/phones/mobile", "650-111-2222") .remove("/1") .build(); JsonArray result = patch.apply(contacts);
67.
Stream対応 JsonArray contacts =
...; List<String> femaleNames = contacts.getValuesAs(JsonObject.class).stream() .filter(x->"F".equals(x.getString("gender"))) .map(x->(x.getString("name")) .collect(Collectors.toList());
68.
JsonCollector JsonArray contacts =
...; JsonArray femaleNames = contacts.getValuesAs(JsonObject.class).stream() .filter(x->"F".equals(x.getString("gender"))) .map(x->(x.getString("name")) .collect(JsonCollectors.toJsonArray());
Download