SlideShare a Scribd company logo
1 of 115
Download to read offline
JDK 10 へようこそ
ローカル変数の型推論
その他
David Buck
JVM Sustaining Engineering
Oracle
Hello JJUG!
バック デイビッド
• Java SE サステイニング エンジニアリング
• JVM のバグを直す人
• OpenJDK Updates
Project Maintainer
• 趣味:プログラミング
• @DavidBuckJP
アジェンダ
• 現在地
• ローカル変数の型推論
• その他
• 最後に
現在地
JDK 9(2017年9月21日)
• Short Term Release (サポートは今月で終了)
• JEP 193: Variable Handles
• JEP 222: jshell: The Java Shell (Read-Eval-Print Loop)
• JEP 237: Linux/AArch64 Port
• JEP 254: Compact Strings
• JEP 282: jlink: The Java Linker
• JEP 295: Ahead-of-Time Compilation
JDK 10(2018年3月20日)
• Short Term Release (サポートは今年の9月で終了)
• 今夜はいっぱい喋る!
JDK 11(2018年9月)
• Long Term Support (LTS) のリリース
• 309: Dynamic Class-File Constants
• 318: Epsilon: An Arbitrarily Low-Overhead Garbage Collector
• 320: Remove the Java EE and CORBA Modules
• 323: Local-Variable Syntax for Lambda Parameters
新しい GC の研究・開発
• ZGC
• 4TBまでのスケーラビリティ
• ヒープサイズ問わずに
• Live-set のサイズ問わずに
• 10ミリ秒以下の STW
• 64ビット専用の GC
• Shenandoah
• Red Hat 社のプロジェクト
• コンカレントメモリコンパクション
プロジェクト Panama
• Foreign Function Interface
• メモリレイアウト(struct など)
By US DOT - https://www.transportation.gov/fastlane/expanded-canal-means-an-expanded-economy, Public Domain, https://commons.wikimedia.org/w/index.php?curid=54989250
プロジェクト Valhalla
• Value Types (値型)
• Generic Specialization (ジェネリックの特殊化)
By Emil Doepler - Doepler, Emil. ca. 1905. Walhall, die Götterwelt der Germanen. Martin Oldenbourg, Berlin. Photographed by Haukurth (talk · contribs) and cropped by Bloodofox (talk · contribs)., Public Domain
プロジェクト Loom
• Fibers (ファイバー)
• Delimited continuations
(限定継続)
• Explicit tail calls (末尾再帰)
By en:Yanagawa Shigenobu - Public Domain, https://commons.wikimedia.org/w/index.php?curid=3505580
ローカル変数の型推論
ローカル変数の型推論
って何?
JEP 286 と言えば
By Konstantin Lanzet (with permission) - CPU collection Konstantin Lanzet, received per EMailCamera: Canon EOS 400D, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=4213086
ローカル変数の型推論
って何?
ArrayList<String> list = new ArrayList<String>();
Stream<String> stream = list.stream();
ローカル変数の型推論
って何?
ArrayList<String> list = new ArrayList<String>();
Stream<String> stream = list.stream();
ローカル変数の型推論
って何?
var list = new ArrayList<String>();
var stream = list.stream();
ローカル変数と言えば
• ローカル変巣 var x = foo();
• for ループ for (var i=0; i<10; i++)
• For-each ループ for (var x : foos())
• try-with-resources try (var r=m())
ローカル変数の型推論
って何?
型推論 != 動的型付け
ローカル変数の型推論
なぜ?
void removeMatches(Map<? extends String, ? extends
Number> map, int max) {
for (Iterator<? extends Map.Entry<? extends String, ?
extends Number>> iterator =
map.entrySet().iterator();
iterator.hasNext();) {
Map.Entry<? extends String, ? extends Number>
entry = iterator.next();
if (max > 0 && matches(entry)) {
iterator.remove();
max--;
}
}
}
void removeMatches(Map<? extends String, ? extends
Number> map, int max) {
for (var iterator = map.entrySet().iterator();
iterator.hasNext();) {
var entry = iterator.next();
if (max > 0 && matches(entry)) {
iterator.remove();
max--;
}
}
}
try (InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is,
charsetName);
BufferedReader buf = new BufferedReader(isr)) {
return buf.readLine();
}
try (var inputStream = socket.getInputStream();
var reader = new InputStreamReader(inputStream,
charsetName);
var bufReader = new BufferedReader(reader)) {
return bufReader.readLine();
}
他の言語も同じ結論
C++ auto
C# var
Scala var/val
Go := 宣言
他の言語も同じ結論
C++ auto
C# var
Scala var/val
Go := 宣言
なぜローカル変数だけ?
Field やメソッドの引数などの影響は複数のファイルを跨る
ClassA.java ClassB.java影響
なぜローカル変数だけ?
Field やメソッドの引数などの影響は複数のファイルを跨る
ClassA.java ClassB.java影響
ローカル変数の型推論
をどうやって使う?
制限
• 初期化は必須
var x;
• 配列のカッコは利用できない
var x[] = new int[42];
• 複数の宣言は禁止
var x = 1, y = 2;
• 配列のリテラルは禁止
var x = { 8, 6, 7, 5, 3,
0, 9 };
• 初期化の表現は変数を参照す
ることは禁止
var x = (x = 7);
• Nullの初期化は禁止
var x = null;
• 解決できない poly 表現
var x = f = (x, y) ->
x+y;
制限
• 初期化は必須
var x;
• 配列のカッコは利用できない
var x[] = new int[42];
• 複数の宣言は禁止
var x = 1, y = 2;
• 配列のリテラルは禁止
var x = { 8, 6, 7, 5, 3,
0, 9 };
• 初期化の表現は変数を参照す
ることは禁止
var x = (x = 7);
• Nullの初期化は禁止
var x = null;
• 解決できない poly 表現
var x = f = (x, y) ->
x+y;
Denotable types
var hogehoge = new Object() {
public void sayHi() {
System.out.println(“Hello JJUG!”);
}
};
hogehoge.sayHi();
Class<?> c = hogehoge.getClass();
System.out.println(c.getName()); // Test$1
var とは何?
• 予約語?
• キーワード?
Java の予約語
abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
Java の予約語
abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
予約語とキーワード
キーワード
言語で何かの意味する表現
int
final
try
など
予約語
識別子として利用出来ない
var とは?
• タイプの名前(クラス・インタフェース)として利用出来ない
• 変数名やフィールド名としては利用出来る
予約語
キーワード
予約語
キーワード
var とは?
int var = 42;
var とは?
class var {
int x = 1;
int y = 2;
}
var とは?
class var {
int x = 1;
int y = 2;
}
var とは?
var var = var();
ローカル変数の型推論
をどうやって使うべきか?
スタイル ガイド
原理
原理
• P1 書きやすさより読みやすさ
原理
• P1 書きやすさより読みやすさ
• P2 ローカルコードで理解できるはず
原理
• P1 書きやすさより読みやすさ
• P2 ローカルコードで理解できるはず
• P3 IDE などのツールに依存すべきではない
原理
• P1 書きやすさより読みやすさ
• P2 ローカルコードで理解できるはず
• P3 IDE などのツールに依存すべきではない
• P4 明示にタイプを宣言するのはトレードオフ
ガイドライン
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
役に立つ情報を表す変数名を使うこと
// ORIGINAL
try (Stream<Customer> result = dbconn.executeQuery(query)) {
return result.map(...)
.filter(...)
.findAny();
}
// GOOD
try (var customers = dbconn.executeQuery(query)) {
return customers.map(...)
.filter(...)
.findAny();
役に立つ情報を表す変数名を使うこと
// ORIGINAL
List<Customer> x = dbconn.executeQuery(query);
// GOOD
var custList = dbconn.executeQuery(query);
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
• G2 ローカル変数のスコープを制限すること
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
• G2 ローカル変数のスコープを制限すること
• G3 初期化の文だけから型が分かる場合、var の利用を検討する
こと
初期化の文だけから型を分かる場合、var
の利用を検討すること
// ORIGINAL
ByteArrayOutputStream outputStream = new
ByteArrayOutputStream();
// GOOD
var outputStream = new ByteArrayOutputStream();
初期化の文だけから型を分かる場合、var
の利用を検討すること
// ORIGINAL
BufferedReader reader =
Files.newBufferedReader(...);
List<String> stringList = List.of("a", "b", "c");
// GOOD
var reader = Files.newBufferedReader(...);
var stringList = List.of("a", "b", "c");
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
• G2 ローカル変数のスコープを制限すること
• G3 初期化の文だけから型が分かる場合、var の利用を検討する
こと
• G4 連続の呼び出しを分解するために var を利用すること
連続の呼び出しを分解するために var を
利用すること
return strings.stream()
.collect(groupingBy(s -> s,
counting()))
.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey);
連続の呼び出しを分解するために var を
利用すること
Map<String, Long> freqMap = strings.stream()
.collect(groupingBy(s -> s, counting()));
Optional<Map.Entry<String, Long>> maxEntryOpt =
freqMap.entrySet()
.stream()
.max(Map.Entry.comparingByValue());
return maxEntryOpt.map(Map.Entry::getKey);
連続の呼び出しを分解するために var を
利用すること
var freqMap = strings.stream()
.collect(groupingBy(s -> s,
counting()));
var maxEntryOpt = freqMap.entrySet()
.stream()
.max(Map.Entry.comparingByValue());
return maxEntryOpt.map(Map.Entry::getKey);
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
• G2 ローカル変数のスコープを制限すること
• G3 初期化の文だけから型が分かる場合、var の利用を検討する
こと
• G4 連続の呼び出しを分解するために var を利用すること
• G5 ローカル変数の場合、インタフェースへのプログラミング
(”programming to the interface”) は気にしなくてもいい
ローカル変数の場合、インタフェースへのプ
ログラミング (”programming to the
interface”) は気にしなくてもいい
// ORIGINAL
List<String> list = new ArrayList<>();
// Inferred type of list is ArrayList<String>.
var list = new ArrayList<String>();
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
• G2 ローカル変数のスコープを制限すること
• G3 初期化の文だけから型が分かる場合、var の利用を検討する
こと
• G4 連続の呼び出しを分解するために var を利用すること
• G5 ローカル変数の場合、インタフェースへのプログラミング
(”programming to the interface”) は気にしなくてもいい
• G6 var をダイアモンドか generic メソッドと一緒に利用する時、
気を付けるこ
var をダイアモンドか generic メソッドと
一緒に利用する時、気を付けるこ
PriorityQueue<Item> itemQueue = new
PriorityQueue<Item>();
// OK: both declare variables of type PriorityQueue<Item>
PriorityQueue<Item> itemQueue = new PriorityQueue<>();
var itemQueue = new PriorityQueue<Item>();
// DANGEROUS: infers as PriorityQueue<Object>
var itemQueue = new PriorityQueue<>();
var をダイアモンドか generic メソッドと
一緒に利用する時、気を付けるこ
// DANGEROUS: infers as List<Object>
var list = List.of();
// OK: itemQueue infers as PriorityQueue<String>
Comparator<String> comp = ... ;
var itemQueue = new PriorityQueue<>(comp);
// OK: infers as List<BigInteger>
var list = List.of(BigInteger.ZERO);
ガイドライン
• G1 役に立つ情報を表す変数名を使うこと
• G2 ローカル変数のスコープを制限すること
• G3 初期化の文だけから型が分かる場合、var の利用を検討する
こと
• G4 連続の呼び出しを分解するために var を利用すること
• G5 ローカル変数の場合、インタフェースへのプログラミング
(”programming to the interface”) は気にしなくてもいい
• G6 var をダイアモンドか generic メソッドと一緒に利用する時、
気を付けること
• G7 var をリテラルと一緒に利用する時、気を付けること
var をリテラルと一緒に利用する時、気
を付けること
// ORIGINAL
boolean ready = true;
char ch = '¥ufffd';
long sum = 0L;
String label = "wombat";
// GOOD
var ready = true;
var ch = '¥ufffd';
var sum = 0L;
var label = "wombat";
var をリテラルと一緒に利用する時、気
を付けること
// ORIGINAL
byte flags = 0;
short mask = 0x7fff;
long base = 17;
// DANGEROUS: all infer as int
var flags = 0;
var mask = 0x7fff;
var base = 17;
var をリテラルと一緒に利用する時、気
を付けること
// ORIGINAL
float f = 1.0f;
double d = 2.0;
// GOOD
var f = 1.0f;
var d = 2.0;
var をリテラルと一緒に利用する時、気
を付けること
// ORIGINAL
static final float INITIAL = 3.0f;
...
double temp = INITIAL;
// DANGEROUS: now infers as float
var temp = INITIAL;
その他
JEP 296
Consolidate the JDK Forest into a Single
• JDK 8
Jdk8u-dev
corba
hotspot
jaxp
jaxws
jdk
langtools
nashorn
JEP 296
Consolidate the JDK Forest into a Single
• JDK 8 • JDK 10
Jdk8u-dev
corba
hotspot
jaxp
jaxws
jdk
langtools
nashorn
jdk10
JEP 304
Garbage Collector Interface
HotSpot Runtime
JIT GC
JEP 304
Garbage Collector Interface
HotSpot Runtime
C1 GC
JEP 304
Garbage Collector Interface
HotSpot Runtime
C2 GC
JEP 304
Garbage Collector Interface
HotSpot Runtime
Tiered
(C1 と C2)
GC
JEP 304
Garbage Collector Interface
HotSpot Runtime
JIT Serial
JEP 304
Garbage Collector Interface
HotSpot Runtime
JIT Parallel
JEP 304
Garbage Collector Interface
HotSpot Runtime
JIT CMS
JEP 304
Garbage Collector Interface
HotSpot Runtime
JIT G1
JEP 304
Garbage Collector Interface
HotSpot Runtime
C2 G1
G1
G1
G1
G1
JEP 304
Garbage Collector Interface
HotSpot Runtime
JIT G1
JEP 307
Parallel Full GC for G1
従来のG1 FullGC JDK 10 以降の G1 FullGC
FullGC
FullGC
FullGC
FullGC
FullGC
JEP 310
Application Class-Data Sharing
java
(JVM)
クラスデータ
(メモリ上)
java
(JVM)
クラスデータ
(メモリ上) java
(JVM)
クラスデータ
(メモリ上)
java
(JVM)
クラスデータ
(メモリ上)
JEP 310
Application Class-Data Sharing
java
(JVM)
java
(JVM)
java
(JVM)
java
(JVM)
クラスデータ
classes.jsa
JEP 312
Thread-Local Handshakes
従来の safepoint (STW) • TLH の実装
JEP 312
Thread-Local Handshakes
従来の safepoint (STW) • TLH の実装
JEP 312
Thread-Local Handshakes
従来の safepoint (STW) • TLH の実装
JEP 312
Thread-Local Handshakes
デフォルトは有効
無効にするには
-XX:-ThreadLocalHandshakes
JEP 313
Remove the Native-Header Generation Tool
(javah)
Javac HelloWorld
javah -jni HelloWorld
javac -h header_files HelloWorld.java
JEP 314
Additional Unicode Language-Tag Extensions
Locale
言語コード 国コード バリアントコード
JEP 314
Additional Unicode Language-Tag Extensions
Locale
言語コード 国コード バリアントコード
例
de_DE_EURO (ドイツ語・ドイツ・ユーロ)
JEP 314
Additional Unicode Language-Tag Extensions
Locale
言語コード 国コード バリアントコード
例
de_DE_EURO (ドイツ語・ドイツ・ユーロ)
ja_JP_JP (日本語・日本・元号)
JEP 314
Additional Unicode Language-Tag Extensions
Locale
言語コード 国コード バリアントコード
例
de_DE_EURO (ドイツ語・ドイツ・ユーロ)
ja_JP_JP (日本語・日本・元号)
th_TH_TH (タイ語・タイ王国・タイ数字)
JEP 314
Additional Unicode Language-Tag Extensions
Locale
言語コード 国コード バリアントコード
例
de_DE_EURO (ドイツ語・ドイツ・ユーロ)
ja_JP_JP (日本語・日本・元号)
th_TH_TH (タイ語・タイ王国・タイ数字)
JEP 314
Additional Unicode Language-Tag Extensions
BCP 47 (JDK 7 で導入)
ca:カレンダー 例: -u-ca-Japanese
nu : 数字 例: -u-nu-thai
JEP 314
Additional Unicode Language-Tag Extensions
BCP 47 (JDK 10 で追加)
cu: 通貨 例: -u-cu-jpy
fw: 週の最初の曜日 例: -u-fw-wed
rg: 領域 例: -u-rg-gbzzzz
tz: 時間帯 例: -u-tz-jptyo
JEP 316
Heap Allocation on Alternative Memory Devices
picture by Trolomite - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=45277623
DAX ファイルシステム経由の
NVDIMMメモリアクセス
-XX:AllocateHeapAt=path
JEP 316
Heap Allocation on Alternative Memory Devices
picture by Trolomite - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=45277623
DAX ファイルシステム経由の
NVDIMMメモリアクセス
-XX:AllocateHeapAt=path
1.mkstemp(filename)
JEP 316
Heap Allocation on Alternative Memory Devices
picture by Trolomite - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=45277623
DAX ファイルシステム経由の
NVDIMMメモリアクセス
-XX:AllocateHeapAt=path
1.mkstemp(filename)
2.unlink(filename)
JEP 316
Heap Allocation on Alternative Memory Devices
picture by Trolomite - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=45277623
DAX ファイルシステム経由の
NVDIMMメモリアクセス
-XX:AllocateHeapAt=path
1.mkstemp(filename)
2.unlink(filename)
3.posix_fallocate(fd, ofset, size);
JEP 316
Heap Allocation on Alternative Memory Devices
picture by Trolomite - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=45277623
DAX ファイルシステム経由の
NVDIMMメモリアクセス
-XX:AllocateHeapAt=path
1.mkstemp(filename)
2.unlink(filename)
3.posix_fallocate(fd, ofset, size);
4.mmap(base, size, PROT_READ |
PROT_WRITE, MAP_SHARED |
MAP_FIXED, fd, 0)
JEP 317
Experimental Java-Based JIT Compiler
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
HotSpot Runtime
Graal GC
By anonymous medieval illuminator; Public Domain, https://commons.wikimedia.org/w/index.php?curid=2856329
JEP 319
Root Certificates
• Oracle JDK • OpenJDK
cacertscacerts
Secom Trust Systems
Let's Encrypt
Digicert Inc.
DocuSign
その他
JEP 319
Root Certificates
• Oracle JDK • OpenJDK
cacerts
Secom Trust Systems
Let's Encrypt
Digicert Inc.
DocuSign
その他
cacerts
Secom Trust Systems
Let's Encrypt
Digicert Inc.
DocuSign
その他
JEP 322
Time-Based Release Versioning
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) Server VM (build 9.0.4+11, mixed mode)
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+45)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+45, mixed mode)
JEP 322
Time-Based Release Versioning
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) Server VM (build 9.0.4+11, mixed mode)
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+45)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+45, mixed mode)
JEP 322
Time-Based Release Versioning
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) Server VM (build 9.0.4+11, mixed mode)
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+45)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+45, mixed mode)
最後に
• JDK 10 の開発環境での利用
• var を利用すべき箇所の検討
• JDK 11 EA リリースの検証
リンク集
• JDK 10
ダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html
ドキュメント
https://docs.oracle.com/javase/10/
スタイル ガイド
http://openjdk.java.net/projects/amber/LVTIstyle.html
• JDK 11
EA ビルド
http://jdk.java.net/11/
プロジェクト
http://openjdk.java.net/projects/jdk/11/
Thank You!

More Related Content

What's hot

Perlと出会い、Perlを作る
Perlと出会い、Perlを作るPerlと出会い、Perlを作る
Perlと出会い、Perlを作るgoccy
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
はてなブックマーク in Scala
はてなブックマーク in Scalaはてなブックマーク in Scala
はてなブックマーク in ScalaLintaro Ina
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)信之 岩永
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream APIdcomsolution
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweightgintenlabo
 
Material
MaterialMaterial
Material_TUNE_
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)x1 ichi
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Yukiko Kato
 

What's hot (20)

ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Perlと出会い、Perlを作る
Perlと出会い、Perlを作るPerlと出会い、Perlを作る
Perlと出会い、Perlを作る
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
はてなブックマーク in Scala
はてなブックマーク in Scalaはてなブックマーク in Scala
はてなブックマーク in Scala
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
Material
MaterialMaterial
Material
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
Emcpp item31
Emcpp item31Emcpp item31
Emcpp item31
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
 

Similar to JDK 10 へようこそ

Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門Shohei Arai
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 

Similar to JDK 10 へようこそ (20)

Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Clojure
ClojureClojure
Clojure
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
Xtend の紹介
Xtend の紹介Xtend の紹介
Xtend の紹介
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
Project coin
Project coinProject coin
Project coin
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Spock's world
Spock's worldSpock's world
Spock's world
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 

More from David Buck

JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]David Buck
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...David Buck
 
Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]David Buck
 
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...David Buck
 
invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]David Buck
 
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...David Buck
 
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]David Buck
 
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]David Buck
 
Z Garbage Collector
Z Garbage CollectorZ Garbage Collector
Z Garbage CollectorDavid Buck
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019David Buck
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018David Buck
 
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]David Buck
 
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]David Buck
 
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]David Buck
 
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]David Buck
 
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]David Buck
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]David Buck
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]David Buck
 
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]David Buck
 

More from David Buck (20)

JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
 
Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]Java Bytecode Crash Course [Code One 2019]
Java Bytecode Crash Course [Code One 2019]
 
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
CSI (Crash Scene Investigation) HotSpot: Common JVM Crash Causes and Solution...
 
invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]invokedynamic for Mere Mortals [Code One 2019]
invokedynamic for Mere Mortals [Code One 2019]
 
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
Hangs, Slowdowns, Starvation—Oh My! A Deep Dive into the Life of a Java Threa...
 
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
JDK Mission Control: Where We Are, Where We Are Going [Code One 2019]
 
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
Java Concurrency, A(nother) Peek Under the Hood [Code One 2019]
 
Z Garbage Collector
Z Garbage CollectorZ Garbage Collector
Z Garbage Collector
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
 
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
 
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ  JVM 特集  2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
 
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
 
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
 
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
Java Debuggers: A Peek Under the Hood [JavaOne 2016 CON1503]
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
 
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]
 

JDK 10 へようこそ