SlideShare a Scribd company logo
末永 恭正 @YaSuenag
https://github.com/YaSuenag/jdt-2017-examples
OracleとJavaは、Oracle Corporation及びその子会社、関連会社の米国及びその他の国における登録商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
•
•
•
•
•
•
•
•
•
•
•
•
http://icedtea.classpath.org/wiki/HeapStats/jp
•
•
https://bugs.openjdk.java.net/
•
• http://openjdk.java.net/jeps/243
•
•
•
•
•
JITコンパイラ
クラスライブラリ
アプリケーション
Graal
HotSpot
JVMCI
1.
2.
•
3.
4.
•
5.
1. ランタイム取得 2. バックエンド取得
3. プロバイダ取得
4. メタデータ取得
JDK内部モジュールです
•
•
•
•
バイトコード
インタープリタ
JIT
Tier 0
Tier 1~4
Deopt
プロファイリング
プロファイリング
JITコンパイルに
かかったか?
コンパイルレベル
(Tier)
メソッドメタデータ取得
(HotSpotResolvedJavaMethod)
hasCompiledCode = true
Compile level = 3
•
プロファイリング情報の
取得
十分
プロファイルできた?
実行回数
例外発生の有無
分岐の割合
0.0(分岐しない)~1.0(全部分岐)
HotSpotProfilingInfo<exceptionSeen@0: FALSE; exceptionSeen@1: FALSE; exceptionSeen@2:
FALSE; exceptionSeen@3: FALSE; exceptionSeen@4: FALSE; exceptionSeen@5: FALSE;
executionCount@6: 501760; branchProbability@6: 0.000002; exceptionSeen@6: FALSE;
exceptionSeen@7: FALSE; exceptionSeen@8: FALSE; exceptionSeen@9: FALSE; exceptionSeen@10:
FALSE; exceptionSeen@11: FALSE; exceptionSeen@12: FALSE; exceptionSeen@13: FALSE;
exceptionSeen@14: FALSE; executionCount@15: 501759; branchProbability@15: 1.000000;
exceptionSeen@15: FALSE; exceptionSeen@16: FALSE; exceptionSeen@17: FALSE;
exceptionSeen@18: FALSE; exceptionSeen@19: FALSE>
Compile level = 3
isMature = true
BCI 6: execution count = 501760, branch = 1.992984693877551E-6
BCI 15: execution count = 501759, branch = 1.0
public static int runLoop(int);
descriptor: (I)I
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=3, args_size=1
0: iconst_0
1: istore_1
2: iconst_1
3: istore_2
4: iload_2
5: iload_0
6: if_icmpgt 18
9: iinc 1, 1
12: iinc 2, 1
15: goto 4
18: iload_1
19: ireturn
ほとんど分岐しない
(0.000002)
上にジャンプ
(1.0)
HotSpotProfilingInfo<exceptionSeen@0: FALSE; exceptionSeen@1: FALSE; exceptionSeen@2:
FALSE; exceptionSeen@3: FALSE; exceptionSeen@4: FALSE; exceptionSeen@5: FALSE;
executionCount@6: 501760; branchProbability@6: 0.000002; exceptionSeen@6: FALSE;
exceptionSeen@7: FALSE; exceptionSeen@8: FALSE; exceptionSeen@9: FALSE; exceptionSeen@10:
FALSE; exceptionSeen@11: FALSE; exceptionSeen@12: FALSE; exceptionSeen@13: FALSE;
exceptionSeen@14: FALSE; executionCount@15: 501759; branchProbability@15: 1.000000;
exceptionSeen@15: FALSE; exceptionSeen@16: FALSE; exceptionSeen@17: FALSE;
exceptionSeen@18: FALSE; exceptionSeen@19: FALSE>
Compile level = 3
isMature = true
BCI 6: execution count = 501760, branch = 1.992984693877551E-6
BCI 15: execution count = 501759, branch = 1.0
100万回動かしてるはずなんだけど…
MDO
•
•
•
•
実際の呼び出し回数と一致しない!
•
•
•
•
•
•
•
262 167 % 3 TestBase::runLoop @ 4 (20 bytes)
263 168 3 TestBase::runLoop (20 bytes)
263 169 % 4 TestBase::runLoop @ 4 (20 bytes)
264 167 % 3 TestBase::runLoop @ 4 (20 bytes) made not entrant
265 169 % 4 TestBase::runLoop @ 4 (20 bytes) made not entrant
:
runLoop() finished.
1136 168 3 TestBase::runLoop (20 bytes) made not entrant
reprofile.
3466 219 % 4 TestBase::runLoop @ 4 (20 bytes)
3468 220 4 TestBase::runLoop (20 bytes)
3468 219 % 4 TestBase::runLoop @ 4 (20 bytes) made not entrant
runLoop() finished.
リプロファイルで
破棄された
最初の生成
リプロファイル後の
生成コード
•
•
•
• 暖気後
• 妥当な
http://cr.openjdk.java.net/~vlivanov/talks/2016_JVMLS_MachineCodeSnippets.pdf
Machine Code Snippetsっぽいことができる!
•
•
•
•
•
•
•
•
•
•
• O S R
•
•
•
•
•
s1 s2 s3 s4 s5 s6 s7 s8src
dest d1 d2 d3 d4 d5 d6 d7 d8
+ + + + + + + +
s1+d1 s2+d2 s3+d3 s4+d4 s5+d5 s6+d6 s7+d7 s8+d8
=
=
=
=
=
=
=
=
•
•
•
https://wiki.openjdk.java.net/display/HotSpot/CallingSequences
呼び出し規約の
種類
使えるレジスタたちの取得
呼び出し規約と
型を指定
引数の順番を指定
ハンドアセンブル!
1.
2.
3.
•
vmovdqu <配列>, %ymm1
vpaddd <配列>, %ymm1, %ymm0
vmovdqu %ymm0, <配列>
※GAS形式
•
• https://software.intel.com/en-us/articles/intel-sdm
•
•
•
•
•
•
•
•
Javaの世界の配列を
どうアセンブラの世界で扱うか?
ヘッダ 長さ 中身
引数で渡ってくる配列オブジェクトの先頭アドレス
Unsafe.ARRAY_INT_BASE_OFFSET
•
• O O P
•
•
インストール
コード確定
プロローグ
エピローグ
配列の中身への
オフセット
実行
PAddInt#padd()
に設定
9 9 9 9 9 9 9 9
$ jcmd 11217 Compiler.codelist | grep padd
582 4 PAddTest$PAddInt.padd([I[I)V [0x00007f9f8970a090, 0x00007f9f8970a220 - 0x00007f9f8970a250]
コンソール出力
コードキャッシュ
(gdb) disas 0x00007f9f8970a220, 0x00007f9f8970a250
Dump of assembler code from 0x7f9f8970a220 to 0x7f9f8970a250:
0x00007f9f8970a220: nopl 0x0(%rax,%rax,1)
0x00007f9f8970a225: push %rbp
0x00007f9f8970a226: mov %rsp,%rbp
0x00007f9f8970a229: sub $0x10,%rsp
0x00007f9f8970a230: vmovdqu 0x10(%rdx),%ymm1
0x00007f9f8970a235: vpaddd 0x10(%rsi),%ymm1,%ymm0
0x00007f9f8970a23a: vmovdqu %ymm0,0x10(%rsi)
0x00007f9f8970a23f: mov %rbp,%rsp
0x00007f9f8970a242: pop %rbp
0x00007f9f8970a243: retq
src側配列をAVXレジスタにロード
足し算(SIMD)
計算結果をdest側配列にストア
好きなアセンブラを動かせる
=何でもできるはず!
•
•
•
•
•
•
•
•
•
•
•
•
• https://linuxjm.osdn.jp/html/LDP_man-pages/man2/syscall.2.html
mov $39, %rax # getpid = 39
syscall
※GAS形式
Little Endian
戻り値を
Javaの世界に戻す
JIT生成コードオブジェクト
開始アドレス
システムコール番号
(39)
Installed address: 0x7fda896fba10
1656
$ jcmd 1656 Compiler.codelist | grep 7fda896fba10
569 4 SyscallTest$GetPID.getPid()I [0x00007fda896fba10, 0x00007fda896fbba0 - 0x00007fda896fbbc8]
コンソール出力
コードキャッシュ
(gdb) disas 0x00007fda896fbba0, 0x00007fda896fbbc8
Dump of assembler code from 0x7fda896fbba0 to 0x7fda896fbbc8:
0x00007fda896fbba0: nopl 0x0(%rax,%rax,1)
0x00007fda896fbba5: push %rbp
0x00007fda896fbba6: mov %rsp,%rbp
0x00007fda896fbba9: sub $0x10,%rsp
0x00007fda896fbbb0: mov $0x27,%rax
0x00007fda896fbbb7: syscall
0x00007fda896fbbb9: mov %rbp,%rsp
0x00007fda896fbbbc: pop %rbp
0x00007fda896fbbbd: retq
システムコール番号の設定
システムコール実行
•
•
•
• 関数アドレスの特定
•
• CALL命令の発行
•
•
•
1. どうやってdlsym(3)を呼ぶ?
2.
3.
4.
•
• https://github.com/graalvm
•
•
•
•
•
1.
2. どうやってchar *を生成する?
3.
4.
•
•
•
•
String#getBytes()
→足せばいい
→Unsafe.ARRAY_BYTE_BASE_OFFSET
String→char *
char *→String
•
•
1.
2.
3. どうやって引数を渡せばいい?
4.
•
• http://refspecs.linuxfoundation.org/
•
•
•
1.
2.
3.
4. どうやって戻り値を設定すればいい?
Javaクラスの型から
戻り値に使うレジスタを取得
第1引数
(ライブラリハンドル)
第2引数
(シンボル名へのポインタ)CALL命令発行
戻り値
(ポインタ:long)
RTLD_DEFAULTで探索
(/usr/include/dlfcn.h)
関数アドレスを
CALL命令にかけるコードを
インストール
1000
$ id
uid=1000(yasuenag) gid=1000(yasuenag) groups=1000(yasuenag)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
コンソール出力
実行ユーザーは…
•
•
• ライブラリのロード
•
•
•
•
•
ヘッダ 長さ 中身
引数で渡ってくる配列オブジェクトの先頭アドレス
ココ
第2引数
(エラー文字列へのポインタ)
第3引数
(エラー文字列の長さ)
ライブラリロード失敗時は
エラーメッセージを表示
ネイティブ関数
呼び出し
関数アドレスを
CALL命令にかけるコードを
インストール
from native
./native/libnativ.so: cannot open shared object file: No such file or directory
もし存在しないライブラリをロードさせたら…
•
•
•
•
•
•
•
•
•
使い方次第で無限の可能性!!
Panamaを先取り!? JVMCIでJITと遊ぶ

More Related Content

What's hot

昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴
Takuya Utsunomiya
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
NTT DATA Technology & Innovation
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越
Kentaro Ebisawa
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Mr. Vengineer
 
eBPFは何が嬉しいのか
eBPFは何が嬉しいのかeBPFは何が嬉しいのか
eBPFは何が嬉しいのか
Yutaro Hayakawa
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
NTT DATA Technology & Innovation
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
GitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみたGitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみた
富士通クラウドテクノロジーズ株式会社
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
npsg
 
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
NTT Communications Technology Development
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
Mr. Vengineer
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
Takanori Sejima
 
Rainbow
RainbowRainbow
Rainbow
harmonylab
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
abend_cve_9999_0001
 

What's hot (20)

昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
 
"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越"SRv6の現状と展望" ENOG53@上越
"SRv6の現状と展望" ENOG53@上越
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
eBPFは何が嬉しいのか
eBPFは何が嬉しいのかeBPFは何が嬉しいのか
eBPFは何が嬉しいのか
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
GitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみたGitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみた
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
Rainbow
RainbowRainbow
Rainbow
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
 

Similar to Panamaを先取り!? JVMCIでJITと遊ぶ

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
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
Yuji Kubota
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
Chihiro Ito
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
オラクルエンジニア通信
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
オラクルエンジニア通信
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
Yuji Kubota
 
JavaLearning_1.pptx
JavaLearning_1.pptxJavaLearning_1.pptx
JavaLearning_1.pptx
RyuuGaku
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
Takahiro YAMADA
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
健一 辰濱
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
 
Riak事始め&デモ
Riak事始め&デモRiak事始め&デモ
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
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
オラクルエンジニア通信
 

Similar to Panamaを先取り!? JVMCIでJITと遊ぶ (20)

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]
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
 
JavaLearning_1.pptx
JavaLearning_1.pptxJavaLearning_1.pptx
JavaLearning_1.pptx
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
Riak事始め&デモ
Riak事始め&デモRiak事始め&デモ
Riak事始め&デモ
 
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]
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
 

More from Yasumasa Suenaga

JDK付属ツールにパッチを出しまくったワケ
JDK付属ツールにパッチを出しまくったワケJDK付属ツールにパッチを出しまくったワケ
JDK付属ツールにパッチを出しまくったワケ
Yasumasa Suenaga
 
HotSpotコトハジメ
HotSpotコトハジメHotSpotコトハジメ
HotSpotコトハジメ
Yasumasa Suenaga
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
 
Metaspace
MetaspaceMetaspace
Metaspace
Yasumasa Suenaga
 
HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)
Yasumasa Suenaga
 
HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)Yasumasa Suenaga
 
Serviceability Toolsの裏側
Serviceability Toolsの裏側Serviceability Toolsの裏側
Serviceability Toolsの裏側Yasumasa Suenaga
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 

More from Yasumasa Suenaga (8)

JDK付属ツールにパッチを出しまくったワケ
JDK付属ツールにパッチを出しまくったワケJDK付属ツールにパッチを出しまくったワケ
JDK付属ツールにパッチを出しまくったワケ
 
HotSpotコトハジメ
HotSpotコトハジメHotSpotコトハジメ
HotSpotコトハジメ
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
Metaspace
MetaspaceMetaspace
Metaspace
 
HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)
 
HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)HeapStatsのデモ (Java The Night)
HeapStatsのデモ (Java The Night)
 
Serviceability Toolsの裏側
Serviceability Toolsの裏側Serviceability Toolsの裏側
Serviceability Toolsの裏側
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 

Panamaを先取り!? JVMCIでJITと遊ぶ