SlideShare uma empresa Scribd logo
1 de 89
Baixar para ler offline
HotSpot のロック
A Peek Under the Hood
David Buck
日本オラクル
JJUG ナイトセミナ JVM特集
自己紹介
バック デイビッド
• Java SE サステイニング エンジニアリング
• JVM のバグを直す人
• 趣味:プログラミング
予定
• はじめに
• Java ロックの復習
• HotSpot のロックの実装
• プロファイリング&チューニング
• その他
はじめに
カバーする内容
synchronized(this) {
c++;
}
カバーする内容
synchronized(this) {
c++;
}
カバーする内容
3: monitorenter
4: aload_0
5: dup
6: getfield #2 // Field c:I
9: iconst_1
10: iadd
11: putfield #2 // Field c:I
14: aload_1
15: monitorexit
カバーする内容
3: monitorenter
4: aload_0
5: dup
6: getfield #2 // Field c:I
9: iconst_1
10: iadd
11: putfield #2 // Field c:I
14: aload_1
15: monitorexit
カバーしない内容
カバーしない内容
• ロックの使い方
カバーしない内容
• ロックの使い方
• java.util.concurrent (JSR-166)
カバーしない内容
• ロックの使い方
• java.util.concurrent (JSR-166)
• Java のメモリ・モデル
目標
目標
• 無理やり最適化を防ぐ
目標
• 無理やり最適化を防ぐ
• プロファイリング・チューニング
目標
• 無理やり最適化を防ぐ
• プロファイリング・チューニング
• 面白い!
JAVA ロックの復習
言語レベルでマルチスレッド
• Monitor って何?
(排他制御)
Mutual Exclusion
(排他制御)
Mutual Exclusion
Mut ex
(排他制御)
Mutual Exclusion
Mutex
条件変数
(condition variable)
"Puffin crossing, London, UK" by secretlondon is licensed under CC BY-SA 3.0
Monitor = Mutex + 条件変数
Monitor = Mutex + 条件変数
• Mutex
– synchronized キーワード
Monitor = Mutex + 条件変数
• Mutex
– synchronized キーワード
• 条件変数
– Object.wait()
– Object.notify()
– Object.notifyAll()
再帰的
public synchronized void increment() {
c++;
printValue();
}
public synchronized void printValue() {
System.out.println("My value is: " + c);
}
メモリ モデル
happens-before ( 前に発生)関係
public class NoSync {
private int c = 0;
public void increment() {
c++;
}
}
public void increment();
flags: ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: dup
2: getfield #2 // Field c:I
5: iconst_1
6: iadd
7: putfield #2 // Field c:I
10: return
ブロックの例
public void increment() {
synchronized(this) {
c++;
}
}
ブロックの例
public void increment();
flags: ACC_PUBLIC
Code:
stack=3, locals=3, args_size=1
0: aload_0
1: dup
2: astore_1
3: monitorenter
4: aload_0
5: dup
6: getfield #2 // Field c:I
9: iconst_1
10: iadd
11: putfield #2 // Field c:I
14: aload_1
15: monitorexit
16: goto 24
19: astore_2
20: aload_1
21: monitorexit
22: aload_2
23: athrow
24: return
Exception table:
from to target type
4 16 19 any
19 22 19 any
ブロックの例
public void increment();
flags: ACC_PUBLIC
Code:
stack=3, locals=3, args_size=1
0: aload_0
1: dup
2: astore_1
3: monitorenter
4: aload_0
5: dup
6: getfield #2 // Field c:I
9: iconst_1
10: iadd
11: putfield #2 // Field c:I
14: aload_1
15: monitorexit
16: goto 24
19: astore_2
20: aload_1
21: monitorexit
22: aload_2
23: athrow
24: return
Exception table:
from to target type
4 16 19 any
19 22 19 any
メソッドの例
public synchronized void increment() {
c++;
}
メソッドの例
public synchronized void increment();
flags: ACC_PUBLIC, ACC_SYNCHRONIZED
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: dup
2: getfield #2 // Field c:I
5: iconst_1
6: iadd
7: putfield #2 // Field c:I
10: return
メソッドの例
public synchronized void increment();
flags: ACC_PUBLIC, ACC_SYNCHRONIZED
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: dup
2: getfield #2 // Field c:I
5: iconst_1
6: iadd
7: putfield #2 // Field c:I
10: return
Java 言語で表現出来ない
public void lockMe();
flags: ACC_PUBLIC
Code:
stack=1, locals=1,
args_size=1
0: aload_0
1: monitorenter
2: return
public void unlockMe();
flags: ACC_PUBLIC
Code:
stack=1, locals=1,
args_size=1
0: aload_0
1: monitorexit
2: return
Java バイトコード
表現力
Java 言語
Java Monitor の制限
Java Monitor の制限
• テスト不可能
Java Monitor の制限
• テスト不可能
• タイムアウト無し
Java Monitor の制限
• テスト不可能
• タイムアウト無し
• キャンセル不可能
Java Monitor の制限
• テスト不可能
• タイムアウト無し
• キャンセル不可能
• 再帰出来る
Java Monitor の制限
• テスト不可能
• タイムアウト無し
• キャンセル不可能
• 再帰出来る
• リーダー/ライターに分けることが不可能
Java Monitor の制限
• テスト不可能
• タイムアウト無し
• キャンセル不可能
• 再帰出来る
• リーダー/ライターに分けることが不可能
• セキュリティの問題
java.util.concurrent
HOTSPOT のロックの実装
設計の方針
• すべてのオブジェクトが Monitor を持つ
• 殆どのオブジェクトが利用しない
• 利用しても、複数のスレッドからのアクセスが
珍しい
• 複数のスレッドからアクセスがあっても、競合
が珍しい
ロックの種類
• Fat
• Thin
• Biased
Biased Thin Fat
重さ
Fat ロック
• OS のスケジューリングに任せる
• 得意ケース:待ち時間が高い
• 別名:Heavyweight lock, inflated ロック
Thin ロック
• ロック取得出来るまでスピンする
• 得意ケース:待ち時間が短い
• 別名:spin lock, stack lock (HS), lightweight
lock
Biased ロック
• 一本のスレッドが独占する
• 違うスレッドが bias を revoke する場合がある
BiasedLock の revoke
• Bias を持つスレッドの停止(STW)
• 本当の状態の確認(スタックウォーキング)
BiasedLock の禁止
• オブジェクトレベル
• クラスレベル
• 起動中の処理
各オブジェクトで管理するデータ
• フィールドのデータ
• Monitor の状態
• GC のデータ(Age など)
• Hash コード
オブジェクトヘッダー
フィールドのデータ
クラスポインター
マークワード
忙しいマークワード
マークワード
Hashcode GC データ Monitor
Hashcode GC データ Monitor
00データ
Thin Locked
Hashcode GC データ Monitor
00移動されたヘッダーの参照
Inflating
Hashcode GC データ Monitor
00NULL
ロックされていない
Biased Locking 不可能
Hashcode GC データ Monitor
01未使用 0
Age /
CMS
Hashcode
Biased
Hashcode GC データ Monitor
01未使用 1
Age /
CMS
スレッドのID と Epoc
Fat Locked
Hashcode GC データ Monitor
01Monitor の参照
GC 実行中(STW)
Hashcode GC データ Monitor
11GC 用
Lock Record
コピーされたマークワード
オブジェクト参照
Lock Record
コピーされたマークワード
オブジェクト参照
01
Age /
CMS
Hash
code
オブジェクト参照
スレッドのスタック
Thin Lock
01
Age /
CMS
Hash
code
オブジェクト参照
フィールドのデータ
クラスポインター
参照 00
スレッドのスタック オブジェクト
Thin Lock (再帰的)
01
Age /
CMS
Hash
code
オブジェクト参照
フィルドのデータ
クラスポインター
参照 00
スレッドのスタック オブジェクト
未使用
オブジェクト参照
Fat Lock
フィールドのデータ
クラスポインター
参照 00
11未使用
オブジェクト参照
スレッドのスタック オブジェクト
ObjectMonitor
01
Age /
CMS
Hash
code
オブジェクト参照
ロックの遷移図
Biased Thin Fat
重さ
プロファイリング&チューニング
プロファイリング
問題点:パフォーマンスのインパクト
プロファイリング
• Performance Counters
• DTrace
• Java Flight Recorder
Performance Counters
• パフォーマンスへのインパクトなし
• 正式にサポートされていない
• HotSpot の開発者向けの情報
• 例:
jstat -snap -J-Djstat.showUnsupported=true
<JVM_PID> |grep _sync
DTrace
• 高い柔軟性
• D 言語の理解が不可欠
• サポートされている OS
– Solaris
– Oracle Linux
– OSX
• -XX:+DTraceMonitorProbes が必要
DTrace
ロック系のプローブ
• monitor-contended-enter
• monitor-contended-entered
• monitor-contended-exit
DTrace
条件変数系のプローブ
• monitor-wait
• monitor-waited
• monitor-notify
• monitor-notifyAll
Java Flight Recorder
• 無料(開発・評価)
• サポート: OracleJDK のすべての OS
設定
• PrintConcurrentLocks
• UseBiasedLocking
• DTraceMonitorProbes
• BiasedLockingStartupDelay
• PrintBiasedLockingStatistics
• TraceBiasedLocking
• TraceMonitorInflation
• MonitorInUseLists
• TraceMonitorMismatch
• UseHeavyMonitors
• BiasedLockingBulkRebiasThreshold
• BiasedLockingBulkRevokeThreshold
• BiasedLockingDecayTime
• SyncKnobs
PrintConcurrentLocks
• java.util.concurrent のロックがスレッドダンプ
で表示される
UseBiasedLocking
• Biased ロックを無効にする
• ロック競合が激しい環境は試す価値がある
その他
Concurrent Programming in Java™:
Design Principles and Patterns
• JDK 1.2のごろ
– JSR-133 なし
– JSR-166 なし
• 設計が注目される
• クラシック
Java Concurrency in Practice
• JDK 1.6 ごろ
– JSR-133 あり
– JSR-166 あり
• 一冊しか読む余裕な
い方:これ!
まとめ
• JVM に任せよう
• Monitor で実現出来ない時、
java.util.concurrent を利用しよう
• プロファイリング: JFR か DTrace
– 要注意:パフォーマンスへのインパクト
• CPiJ と JCiP を読むべき
ありがとうございます
参照
• [ jstat man page ]
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
• [ DTrace Probes in HotSpot VM ]
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/dtrace.html
• [ JMC Tutorial ]
http://hirt.se/blog/?p=611
• [ David Dice's Weblog ]
https://blogs.oracle.com/dave/
• [ HotSpot Internals ]
https://wiki.openjdk.java.net/display/HotSpot/Main

Mais conteúdo relacionado

Semelhante a HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]

Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019David Buck
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3daktsk
 
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島Tomoaki Shimizu
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Tomoaki Shimizu
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツールYasumasa Suenaga
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日貴大 山下
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門Kohki Miki
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another sideKiwamu Okabe
 
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
 
スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集Hiroaki Wakamatsu
 
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてMacでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてTomoaki Shimizu
 
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてWindowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてTomoaki Shimizu
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
Osc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiOsc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiNoriyuki Yamaguchi
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングNVIDIA Japan
 

Semelhante a HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月] (20)

Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
 
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日高位合成友の会@ドワンゴ,2015年12月8日
高位合成友の会@ドワンゴ,2015年12月8日
 
PCL
PCLPCL
PCL
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
 
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]
 
スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集
 
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてMacでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
 
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築についてWindowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
Osc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiOsc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamaguti
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミング
 

Mais de 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
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid 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
 
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
 
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
 
HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]
HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]
HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]David Buck
 
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584] Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584] David Buck
 
Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...
Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...
Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...David Buck
 

Mais de 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
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
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]
 
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]
 
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]
 
HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]
HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]
HotSpot Synchronization, A Peek Under the Hood [JavaOne 2015 CON7570]
 
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584] Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
 
Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...
Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...
Everything You Wanted to Know About JIT Compilation but Were Afraid to Ask [J...
 

HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]