SlideShare a Scribd company logo
1 of 133
Download to read offline
VMの歩む道。
Dalvik、ART、そしてJava VM
JJUG CCC 2017 Spring
#ccc_a7 #jjug_ccc
@yy_yank
#ccc_a7 #jjug_ccc
でつぶやいてください
ハッシュタグ
自己紹介
やんく(@yy_yank)
        こいつです
        ・JJUG CCC登壇3回目
        ・vi好き
        ・でもサクラエディタicon
        ・JavaとKotlinが好き
質問です!!
JVM初心者ですか?
僕より詳しくないですか?
Question1
Android開発したこと
がありますか?
Question2
サーバーサイドを
Javaで開発したことが
ありますか?
Question3
・VMにチョットクワシクナル(not エキスパート)
・VMの比較対象を増やす
・知らずに批評をしない、知ってる知識を
ベースにフェアになる
本セッションのゴール
・Oracle vs Google
・Apache Harmonyの細かい話
過去のJJUGナイトセミナーのこの内容を読
むと良いと思います。
http://www.publickey1.jp/blog/16/googl
eoraclejava_apiitjjug.html
本セッションで話題にしないこと
・実践的なVMのパフォーマンスチューニング
Javaパフォーマンスという
本があるので
それを読んでいただければ
おそらく・・・!
本セッションで話題にしないこと
アジェンダ
1. Javaの人にとってのDalvik/ART
2.Androidの人にとってのJVM(not Dalvik/ART)
3.こんなに違う、マシン命令
4.バイナリ(class、dex)
5.ランタイムごとのAOT、JIT、GC
6.まとめ
アジェンダ
▷ 1. Javaの人にとってのDalvik/ART
2.Androidの人にとってのJVM(not Dalvik/ART)
3.こんなに違う、マシン命令
4.バイナリ(class、dex)
5.ランタイムごとのAOT、JIT、GC
6.まとめ
・別に知らなくていい(身も蓋もない)
・知ってた方がプラットフォームを意識した設
計・プログラミングが出来るのでは
・HotSpot以外のVMを知ってた方が翻って
HotSpotの理解につながるのでは
1. Javaの人にとってのDalvik/ART
☆今更ながら前提
・現状Oracleの提供するJVM = HotSpot
・AndroidのVM = ART(昔はDalvik)
・それぞれダルビック、アートと読む
ARTはDalvikがベースとなっている
1. Javaの人にとってのDalvik/ART
Q.HotSpot VM以外無いの?
A.あります
・HotSpotは(元Sun、現Oracle所有)
・IBM J9 VM(IBM)
・JRockit(元BEA、現Oracle所有)
など
1. Javaの人にとってのDalvik/ART
Q.HotSpot VM以外無いの?
A.あります
・HotSpotは(元Sun、現Oracle所有)
・IBM J9 VM(IBM)
・JRockit(元BEA、現Oracle所有)
など
1. Javaの人にとってのDalvik/ART
とても大胆に分けてしまうと、大体
の人はHotSpotを使っていて、
JVMの処理系を意識していない
ものと思います
1. Javaの人にとってのDalvik/ART
◯JRockit・・・1.6までしかない。1.7で
HotSpotと統合されたようです
◯J9 VM・・・Websphere、DB2などで利用
されてきました。Open J9というプロジェクト
もありアクティブですが、シェアはHotSpot
が多いと思われます
◯JRockit・・・1.6までしかない。1.7で
HotSpotと統合されたようです
◯J9 VM・・・Websphere、DB2などで利用
されてきました。Open J9というプロジェクト
もありアクティブですが、シェアはHotSpot
が多いと思われます
1. Javaの人にとってのDalvik/ART
ということで、本セッションでは
HotSpot、Dalvik/ARTを中心に話
をします
1. Javaの人にとってのDalvik/ART
cf. J9 VMの情報は以下が詳しい
IBM SDK for Java 8の全貌
https://www.slideshare.net/takakiyo/jj
ugccc-201ibm-sdk-for-java-8
アジェンダ
1. Javaの人にとってのDalvik/ART
▷2.Androidの人にとってのJVM(not Dalvik/ART)
3.こんなに違う、マシン命令
4.バイナリ(class、dex)
5.ランタイムごとのAOT、JIT、GC
6.まとめ
・JavaもどきとかAndroid Javaとはなぜ言う人
がいるか(またそれに対しての対応)
・違いを知る。実機では動かないけどIDEでは
動く、なぜ?とか
・なぜHotSpotがあるのにAndroidはVMを独
自に用意した?
2.Androidの人にとってのJVM
・言葉が悪い
・JavaであってちょっとJavaでなくてちょっと
JavaなのがAndroid
・Android Javaぐらいが妥当な表現か
Javaもどき問題
Javaもどき問題
・JLSは満たしているようだが、
JVMSは満たしていない
(歴史的経緯でTCKをパスしていない)
・標準ライブラリが違う
例えばjava.beansパッケージに含まれているク
ラスが少ないなど
アジェンダ
1. Javaの人にとってのDalvik/ART
2.Androidの人にとってのJVM(not Dalvik/ART)
▷ 3.こんなに違う、マシン命令
4.バイナリ(class、dex)
5.ランタイムごとのAOT、JIT、GC
6.まとめ
ちょっとその前に
・HotSpotはスタックマシン
・Dalvik/ARTは(特殊な)レジスタマシン
スタックマシンは命令を積み上げ
レジスタマシンは命令をレジスタへの登録
Dalvik/ARTの場合はメモリ領域をレジスタと呼ん
でいる(特殊とはそのあたりのこと)
3.こんなに違う、マシン命令
・HotSpotはスタックマシン
・Dalvik/ARTは(特殊な)レジスタマシン
スタックマシンは命令を積み上げ
レジスタマシンは命令をレジスタへの登録
Dalvik/ARTの場合はメモリ領域をレジスタと呼ん
でいる(特殊とはそのあたりのこと)
3.こんなに違う、マシン命令
そもそもマシンの
モデルが違った
簡略例:スタックマシン
3.こんなに違う、マシン命令
メモリ
ス
タ
ッ
ク
簡略例:スタックマシン
3.こんなに違う、マシン命令
メモリ
1ス
タ
ッ
ク
1をPUSH
簡略例:スタックマシン
3.こんなに違う、マシン命令
メモリ
2
1
ス
タ
ッ
ク
2をPUSH
簡略例:スタックマシン
3.こんなに違う、マシン命令
メモリ
1ス
タ
ッ
ク
2をPOP
簡略例:スタックマシン
3.こんなに違う、マシン命令
メモリ
ス
タ
ッ
ク
1をPOP
簡略例:スタックマシン
3.こんなに違う、マシン命令
メモリ
3ス
タ
ッ
ク
POPした1 と 2
を加算して
PUSH
簡略例:レジスタマシン
3.こんなに違う、マシン命令
メモリ
レ
ジ
ス
タ
R0
R1
R2
R3
簡略例:レジスタマシン
3.こんなに違う、マシン命令
メモリ
1レ
ジ
ス
タ
R0
R1
R2
R3
R0に1を登録
簡略例:レジスタマシン
3.こんなに違う、マシン命令
メモリ
1
2
レ
ジ
ス
タ
R0
R1
R2
R3
R1に2を登録
簡略例:レジスタマシン
3.こんなに違う、マシン命令
メモリ
1
2
3(R0 + R1)
レ
ジ
ス
タ
R0
R1
R2
R3
R2にR0+R1を
登録
簡略例:Dalvik/ARTのレジスタマシン
3.こんなに違う、マシン命令
メモリ
メソッドB
メソッドB
メソッドA
メソッドA
レ
ジ
ス
タ
R1
R0
R1
R0
簡略例:Dalvik/ARTのレジスタマシン
3.こんなに違う、マシン命令
メモリ
メソッドB
メソッドB
メソッドA
メソッドA
レ
ジ
ス
タ
R1
R0
R1
R0
メソッドごとにスタック。
でもレジスタマシン。
簡略例:Dalvik/ARTのレジスタマシン
3.こんなに違う、マシン命令
メモリ
メソッドB
メソッドB
メソッドA
メソッドA
レ
ジ
ス
タ
R1
R0
R1
R0
レジスタと言いつつ
演算用のメモリ領域に確保し
ている
簡略例:Dalvik/ARTのレジスタマシン
3.こんなに違う、マシン命令
メモリ
メソッドB
メソッドB
メソッドA
メソッドA
レ
ジ
ス
タ
R1
R0
R1
R0
むずかしい!?
このスライドが詳しいです。
Dalvik仮想マシンのアーキテクチャ 改訂版
https://www.slideshare.net/kmt-t/dalvi
k-10316622
というかTakuya Matsunagaという方がすごい
3.こんなに違う、マシン命令
なんで違う?
HotSpotはスタックマシン
・ハードウェアを問わず動かしやすいアーキ
テクチャ
・Run Anywhere的なところを優先した結果
なのか・・・?
3.こんなに違う、マシン命令
☆なんで違う?
Dalvik/ARTは(特殊な)レジスタマシン
・instruction dispatchを避けたかった
・不要なメモリアクセスを避けたかった
・命令処理の流れを素早くさばきたい
3.こんなに違う、マシン命令
☆なんで違う?
Dalvik/ARTは(特殊な)レジスタマシン
・instruction dispatchを避けたかった
・不要なメモリアクセスを避けたかった
・命令処理の流れを素早くさばきたい
3.こんなに違う、マシン命令
・instruction dispatchとは
メモリからの命令のフェッチ
や読み込み、ジャンプなどな
ど
やっと
マシン命令の話
3.こんなに違う、マシン命令
・HotSpot
マシン命令の一例
invokevirtual = インスタンスのメソッド呼び出し
invokeinterface = interfaceのメソッド呼び出し
invokestatic = staticメソッドの呼び出し
invokespecial = コンストラクタの呼び出し
よく見るやつですね
・Dalvik/ART
マシン命令の一例
invoke-virtual = インスタンスのメソッド呼び出し
invoke-interface = interfaceのメソッド呼び出し
invoke-static = staticメソッドの呼び出し
new-instance = インスタンスの生成
3.こんなに違う、マシン命令
大体一緒やん
いえいえ、違うところ
も…
3.こんなに違う、マシン命令
・HotSpot
マシン命令の一例
invokevirtual = 0xb6
invokeinterface = 0xb7
invokestatic =0xb8
invokespecial = 0xb9
・Dalvik/ART
マシン命令の一例
invoke-virtual = 0x6e
invoke-interface = 0x72
invoke-static = 0x71
new-instance = 0x22
3.こんなに違う、マシン命令
・Dalvik/ART
マシン命令の一例
invoke-virtual = 0x6e
invoke-interface = 0x72
invoke-static = 0x71
new-instance = 0x22
オペコードの値は違う(そりゃそうか)
3.こんなに違う、マシン命令
・Dalvik/ARTとHotSpotでどちらにもあるもの
return系命令
const系命令
if系命令
などなど。
3.こんなに違う、マシン命令
・Dalvik/ARTとHotSpotでどちらにもあるもの
return系命令
const系命令
if系命令
などなど。
3.こんなに違う、マシン命令HotSpot:
ireturn(0xac)
lreturn(0xad)
freturn(0xae)
Dalvik/ART:
return-void(0x0e)
return (0x0f)
return-wide(0x10)
return-object(0x11)
・Dalvik/ARTとHotSpotでどちらにもあるもの
return系命令
const系命令
if系命令
などなど。
3.こんなに違う、マシン命令HotSpot:
iconst_ほげほげ
lconst_ほげほげ
dconst_ほげほげ
Dalvik/ART:
const/4
const/16
const
・Dalvik/ARTとHotSpotでどちらにもあるもの
return系命令
const系命令
if系命令
などなど。
3.こんなに違う、マシン命令
などなど・・・。
(気になる人は命令セッ
トを比較してみて下さい)
・Dalvik/ARTとHotSpotでどちらにもあるもの
return系命令
const系命令
if系命令
などなど。
3.こんなに違う、マシン命令
命令の名称やオペコードの
値は色々違っているのだけ
ど、大体やる処理としては
同じ
・Dalvik/ARTにしかなさそうなもの
move命令
->レジスタペアを別のレジスタに移動
invoke-polymophicとinvoke-custom
->Androidの8.0から新しく使えるようになるオペコード。
MethodHandleを呼び出すのだとか・・!
3.こんなに違う、マシン命令
3.こんなに違う、マシン命令
・こんなに違う、は主にVMのマシンアーキテクチャだった
・それにともなって、マシン命令も違う(というより、オペ
コードの値は違う)
・実行バイナリが違うことも1つ大きな要因だと思います
(この後に紹介します)
アジェンダ
1. Javaの人にとってのDalvik/ART
2.Androidの人にとってのJVM(not dalvik/ART)
3.こんなに違う、マシン命令
▷ 4.バイナリ(class、dex)
5.ランタイムごとのAOT、JIT、GC
6.まとめ
4.バイナリ(class、dex)
・HotSpotはclassファイル
・Dalvik/ARTはdex(Dalvik Executable)ファイル
がそれぞれVMにロードされて
マシンコードになって実行される
4.バイナリ(class、dex)
ソースコード
(javaファイル)
dexツール dexファイル
HotSpot VM Dalvik/ART VM
classファイル
☆classファイルフォーマット
1.magic;
2.minor_version;
3.major_version;
4.constant_pool_count;
5.cp_info
constant_pool[constant_pool_count-1];
4.バイナリ(class、dex)
☆classファイルフォーマット
1.magic;
2.minor_version;
3.major_version;
4.constant_pool_count;
5.cp_info
constant_pool[constant_pool_count-1];
4.バイナリ(class、dex)
いわゆるひとつ
のCAFEBABE
.classに必ずある
もの
☆classファイルフォーマット
1.magic;
2.minor_version;
3.major_version;
4.constant_pool_count;
5.cp_info
constant_pool[constant_pool_count-1];
4.バイナリ(class、dex)
クラスファイルの
version
☆classファイルフォーマット
1.magic;
2.minor_version;
3.major_version;
4.constant_pool_count;
5.cp_info
constant_pool[constant_pool_count-1];
4.バイナリ(class、dex)
定数プール
のカウント
☆classファイルフォーマット
1.magic;
2.minor_version;
3.major_version;
4.constant_pool_count;
5.cp_info
constant_pool[constant_pool_count-1];
4.バイナリ(class、dex)
定数プール
☆classファイルフォーマット
7.access_flags;
8.this_class;
9.super_class;
10.interfaces_count;
11.interfaces[interfaces_count];
12.fields_count;
13.field_info fields[fields_count];
4.バイナリ(class、dex)
クラスやフィールドへ
のアクセスフラグ。
publicとかprivateとか
アレ
☆classファイルフォーマット
7.access_flags;
8.this_class;
9.super_class;
10.interfaces_count;
11.interfaces[interfaces_count];
12.fields_count;
13.field_info fields[fields_count];
4.バイナリ(class、dex)
このクラス自身と
継承しているスーパー
クラスの情報
☆classファイルフォーマット
7.access_flags;
8.this_class;
9.super_class;
10.interfaces_count;
11.interfaces[interfaces_count];
12.fields_count;
13.field_info fields[fields_count];
4.バイナリ(class、dex)
interfaceのカウントと
intefefaceの配列
☆classファイルフォーマット
7.access_flags;
8.this_class;
9.super_class;
10.interfaces_count;
11.interfaces[interfaces_count];
12.fields_count;
13.field_info fields[fields_count];
4.バイナリ(class、dex)
フィールドのカウントと
フィールドの配列
☆classファイルフォーマット
14.methods_count;
15.method_info methods[methods_count];
16.attributes_count;
17.attribute_info attributes[attributes_count];
4.バイナリ(class、dex)
☆classファイルフォーマット
14.methods_count;
15.method_info methods[methods_count];
16.attributes_count;
17.attribute_info attributes[attributes_count];
4.バイナリ(class、dex)
メソッドのカウントと
メソッドの配列
☆classファイルフォーマット
14.methods_count;
15.method_info methods[methods_count];
16.attributes_count;
17.attribute_info attributes[attributes_count];
4.バイナリ(class、dex)
attributeという特殊な
もののカウントと
その配列
簡単ですね(?)
☆classファイルフォーマット
・versioningされている
・情報ごとにカウントを持っている
・各情報の配列を持つ
・アクセシビリティの情報も持つ
・ただしバイナリを直接読むのは辛いし
javapで良い気がする
4.バイナリ(class、dex)
続いてdex
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
ヘッダー情報
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
文字列定数のID
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
型情報のID
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
メソッドの
プロトタイプ情報のID
(DEXでのテンプレート)
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
フィールド情報のID
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
メソッド情報のID
☆dexファイルフォーマット
1.header
2.string ids
3.type ids
4.proto_ids
5.field_ids
6.method_ids
7.class_defs
4.バイナリ(class、dex)
クラス定義リスト
☆dexファイルフォーマット
8.call_site_ids
9.method_handles
10.data
11.link_data
4.バイナリ(class、dex)
☆dexファイルフォーマット
8.call_site_ids
9.method_handles
10.data
11.link_data
4.バイナリ(class、dex)
全てcall siteの
参照情報
(call siteはメソッドの場
所的なもの)
☆dexファイルフォーマット
8.call_site_ids
9.method_handles
10.data
11.link_data
4.バイナリ(class、dex)
ハンドリングするメソッド
のリスト
☆dexファイルフォーマット
8.call_site_ids
9.method_handles
10.data
11.link_data
4.バイナリ(class、dex)
全部のデータテーブルを
持つ
☆dexファイルフォーマット
8.call_site_ids
9.method_handles
10.data
11.link_data
4.バイナリ(class、dex)
静的リンクされた情報
☆dexファイルフォーマット
・基本的に持っている情報は同じ
(身も蓋もない)
・ただ並び順も持ち方も違う
・もちろんそれぞれのバイトコードは
それぞれのVMでしか動かない
4.バイナリ(class、dex)
アジェンダ
1. Javaの人にとってのDalvik/ART
2.Androidの人にとってのJVM(not dalvik/ART)
3.こんなに違う、マシン命令
4.バイナリ(class、dex)
▷ 5.ランタイムごとのAOT、JIT、GC
6.まとめ
・JIT(Just-In-Time Compiler)とは
実行時にネイティブコードにコンパイルする
・AOT(Ahead-Of-Time Compiler)とは
実行前にネイティブコードにコンパイルする
・GCとは
ガベージコレクション。JavaもAndroidも共通のメモリ管
理の機構
5.ランタイムごとのAOT、JIT、GC
・JIT(Just-In-Time Compiler)とは
実行時にネイティブコードにコンパイルする
・AOT(Ahead-Of-Timeコンパイラ)とは
実行前にネイティブコードにコンパイルする
・GCとは
ガベージコレクション。JavaもAndroidも共通のメモリ管
理の機構
5.ランタイムごとのAOT、JIT、GC
本来、AOT、JITとGCを並べるのは
変な感じですが、
資料の構成上並べて紹介する形とします
・HotSpotでJITが動いてるかどうか
->だいたい動いてる
・ホットなスポットだけJITする
・起動時にvm optionに -XX:+PrintCompilation って付
けるとめっちゃJITされたログが出てくる
・-Djava.compiler=none を付け加えるとJITが無効に
なって何もログが出なくなる
5.ランタイムごとのAOT、JIT、GC
☆JITの場合(HotSpot)
ぼく「javac Hello.java」
ぼく「java Hello」
HotSpot「メソッド実行前にチェックします」
HotSpot「これはネイティブコードにしときますね〜」
5.ランタイムごとのAOT、JIT、GC
☆JITの場合(Dalvik)
ぼく「アプリインストールした。」
ぼく「起動してみよう」
Dalvik「メソッド実行前にチェックします」
Dalvik「これはネイティブコードにしときますね〜」
5.ランタイムごとのAOT、JIT、GC
☆AOTの場合(ART)
ぼく「アプリインストールしよっと」
ART「あ、これインストール中でもネイティブコードに出来
ますわー」
ART「ネイティブコードにしときますね〜」
ぼく「よし、インストール出来た。使ってみよ」
5.ランタイムごとのAOT、JIT、GC
☆AOTの場合(ART)
ぼく「アプリインストールしよっと」
ART「あ、これインストール中でもネイティブコードに出来
ますわー」
ART「ネイティブコードにしときますね〜」
ぼく「よし、インストール出来た。使ってみよ」
実行時のオーバーヘッドが少ない!!!
5.ランタイムごとのAOT、JIT、GC
Google
IO 2014
the ART
Runtime
より
ココ!!!
Google
IO 2014
the ART
Runtime
より
☆JIT or AOTについて
・HotSpotはJIT/Interpreterを採用
・Dalvik(Android 5.0以前)まではJIT/Interpreter
・ART以降(Android 5.0)はAOTを利用している
5.ランタイムごとのAOT、JIT、GC
☆JIT or AOTについて
・HotSpotはJIT/Interpreterを採用
・Dalvik(Android 5.0以前)まではJIT
・ART以降(Android 5.0)はAOTを利用している
5.ランタイムごとのAOT、JIT、GC
Android 5.0は
2014年から
☆JIT or AOTについて
・HotSpotはJIT/Interpreterを採用
・Dalvik(Android 5.0以前)まではJIT
・ART以降(Android 5.0)はAOTを利用している
5.ランタイムごとのAOT、JIT、GCAOT
JIT
Interpreter
を選べる
☆JIT or AOTについて
・HotSpotはJIT/Interpreterを採用
・Dalvik(Android 5.0以前)まではJIT
・ART以降(Android 5.0)はAOTを利用している
Android 7.0からはAOT + JITという形に
5.ランタイムごとのAOT、JIT、GCAOT
JIT
Interpreter
を選べる
どういうことか
☆Android 5.0のART
ぼく「アプリインストールしよっと」
ART「あ、これインストール中でもネイティブコードに出来
ますわー」
ぼく「インストールめっちゃ長い。電池消費やばい。もうマ
ヂムリ」
(ということもあったらしい)
5.ランタイムごとのAOT、JIT、GC
Google IO 2016
The Evolution of
ARTより
☆Android 7.0のAOT + JIT
ぼく「アプリインストールしよっと」
ART「あ、これインストール中でもネイティブコードに出来
ますわー。でも電池消費するからちょっとだけ。あとは
JITさんに任せますわ」
ぼく「よしインストール出来たし、アプリ使ってみよっと」
5.ランタイムごとのAOT、JIT、GC
☆Android 7.0のAOT + JIT
ぼく「アプリインストールしよっと」
ART「あ、これインストール中でもネイティブコードに出来
ますわー。でも電池消費するからちょっとだけ。あとは
JITさんに任せますわ」
ぼく「よしインストール出来たし、アプリ使ってみよっと」->
ユーザーのストレスが少ない形に
5.ランタイムごとのAOT、JIT、GC
DalvikとARTの違いはこのあたり
・そもそもDalvikはシングルコア向けに作られていた
・Androidは8コアになった。だからART
・スイープのpauseがARTの方が短くなったらしい
・dexファイルが動く、など基本的なところは同じ
・違いはAOTが入ったこと、GC改善、ロギング改善など
5.ランタイムごとのAOT、JIT、GC
???「なるほど。
AOTいいんじゃない?」
???「HotSpotでやれば
良いじゃないか」
☆HotSpotのAOT
・・・・・・・・・・・・・。
5.ランタイムごとのAOT、JIT、GC
☆HotSpotのAOT
あると思います!!!!
5.ランタイムごとのAOT、JIT、GC
HotSpotのAOT
HotSpotのAOT
HotSpotのAOT
☆JEP295
・Java 9では入らない
・javaコマンドオプションでAOTライブラリを指定
・It uses Graal as the code-generating backend.
5.ランタイムごとのAOT、JIT、GC
☆Graalとは
・Next generation compilation technology
supporting Java, Ruby, R, JavaScript, LLVM, and
more...
というJavaで書かれてるヤバいやつ
5.ランタイムごとのAOT、JIT、GC
99%Javaです!
5.ランタイムごとのAOT、JIT、GC
つづいてGC!
☆GCについて
HotSpotだと
・シリアル GC
・パラレル GC
・CMS GC(Java 9でdeprecated?)
・G1GC(Java 9でデフォルト?)
ココから選ぶことになる
5.ランタイムごとのAOT、JIT、GC
5.ランタイムごとのAOT、JIT、GC
☆ARTだと
dalvik.vm.gctypeプロパティを変更するか、-Xgcオプショ
ンで
・CMS GC(デフォルト)
・Semi Space GC(いわゆるコピーGC)
・Generational Semi Space GC(いわゆるコピーGC)
5.ランタイムごとのAOT、JIT、GC
☆ARTだと
dalvik.vm.gctypeプロパティを変更するか、-Xgcオプショ
ンで
・CMS GC(デフォルト)
・Semi Space GC(いわゆるコピーGC)
・Generational Semi Space GC(いわゆるコピーGC)
可動オブジェクトを動かす空間
と非可動オブジェクトの空間を
持つ。
移動させてシュッとGC
5.ランタイムごとのAOT、JIT、GC
☆ARTだと
dalvik.vm.gctypeプロパティを変更するか、-Xgcオプショ
ンで
・CMS GC(デフォルト)
・Semi Space GC(いわゆるコピーGC)
・Generational Semi Space GC(いわゆるコピーGC)
こっちはそれを世代別に
5.ランタイムごとのAOT、JIT、GCDalvik
Google IO 2014 the ART
Runtimeより
5.ランタイムごとのAOT、JIT、GCART
Google IO 2014 the ART
Runtimeより
アジェンダ
1. Javaの人にとってのDalvik/ART
2.Androidの人にとってのJVM(not dalvik/ART)
3.こんなに違う、マシン命令
4.バイナリ(class、dex)
5.ランタイムごとのAOT、JIT、GC
▷ 6.まとめ
なんのためのDalvik、ARTか
・Androidに最適化されている
・ARTは最近?のAndroid端末に合わせての更なる最適
化
・当たり前だがプラットフォームが違えば要求される実行
環境(VM)も違う
・プラットフォームを優先した結果独自VMとして別々の道
を歩むことになった
6.まとめ
・プラットフォームに合わせるために犠牲はつきもの?
->Android SDKに無くて、JDKにあるものはあるが、バラ
ンスを考えてそうなっている
・どちらも頑張った結果
->HotSpotはPCマシン(あるいはサーバー)前提で最適化
を頑張った結果、Dalvik/ARTはAndroidプラットフォーム
前提で頑張った結果
6.まとめ
・VMをブラックボックスとして扱う技術者にならないように
(自戒を込めて)
・どう動いているのか意識して、その上でIDEに任せて楽
をしたい
・何が起こってるか理解できないと問題を解決できない
6.まとめ

More Related Content

What's hot

REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCYu Nobuoka
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)NTT DATA Technology & Innovation
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてAya Ebata
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)Amazon Web Services Japan
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 Yugo Shimizu
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」y torazuka
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方Takahiro YAMADA
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 日本マイクロソフト株式会社
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 

What's hot (20)

REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
Javaメモリ勉強会
Javaメモリ勉強会Javaメモリ勉強会
Javaメモリ勉強会
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
Java11へのマイグレーションガイド ~Apache Hadoopの事例~
Java11へのマイグレーションガイド ~Apache Hadoopの事例~Java11へのマイグレーションガイド ~Apache Hadoopの事例~
Java11へのマイグレーションガイド ~Apache Hadoopの事例~
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 

Viewers also liked

2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2Kazuhiro Wada
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Kosuke Kida
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求hajime funaki
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Logico
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善Works Applications
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~Yoshio Kajikuri
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project JigsawYuichi Sakuraba
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門Masaya Dake
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 

Viewers also liked (20)

2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 

Similar to VMの歩む道。 Dalvik、ART、そしてJava VM

Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Koichi Sakata
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osakaSeiji Noro
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているKoichi Sakata
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルにHiroko Tamagawa
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテストYoichiro Sakurai
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-onSeiji Noro
 
110709 silverlight square_tanaka_pub
110709 silverlight square_tanaka_pub110709 silverlight square_tanaka_pub
110709 silverlight square_tanaka_pubTakayoshi Tanaka
 
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureVisual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureKazushi Kamegawa
 
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1MasuqaT
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみたYoshitaka Seo
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTatsuya Ishikawa
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 

Similar to VMの歩む道。 Dalvik、ART、そしてJava VM (20)

Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
 
110709 silverlight square_tanaka_pub
110709 silverlight square_tanaka_pub110709 silverlight square_tanaka_pub
110709 silverlight square_tanaka_pub
 
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureVisual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger Feature
 
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
 
LightSwitchで遊んでみた
LightSwitchで遊んでみたLightSwitchで遊んでみた
LightSwitchで遊んでみた
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 

More from yy yank

Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門yy yank
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係yy yank
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪yy yank
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzzyy yank
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かすyy yank
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlinyy yank
 
絶対にぬるぽを出さない
絶対にぬるぽを出さない絶対にぬるぽを出さない
絶対にぬるぽを出さないyy yank
 
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけどKotlinこんなん出ましたけど
Kotlinこんなん出ましたけどyy yank
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたいyy yank
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーションyy yank
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にyy yank
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlinyy yank
 

More from yy yank (12)

Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かす
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
 
絶対にぬるぽを出さない
絶対にぬるぽを出さない絶対にぬるぽを出さない
絶対にぬるぽを出さない
 
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけどKotlinこんなん出ましたけど
Kotlinこんなん出ましたけど
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
 

Recently uploaded

20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 

Recently uploaded (11)

What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 

VMの歩む道。 Dalvik、ART、そしてJava VM