Soumettre la recherche
Mettre en ligne
VMの歩む道。 Dalvik、ART、そしてJava VM
•
18 j'aime
•
14,558 vues
yy yank
Suivre
JJUG CCC 2017 Springの資料です #ccc_a7
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 133
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
スレッドダンプの読み方
スレッドダンプの読み方
Funato Takashi
鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解
Masahito Zembutsu
Recommandé
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Java 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
スレッドダンプの読み方
スレッドダンプの読み方
Funato Takashi
鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解
Masahito Zembutsu
DrupalをDockerで起動してみる
DrupalをDockerで起動してみる
iPride Co., Ltd.
みんな大好きJava gc入門 【前編】
みんな大好きJava gc入門 【前編】
kouzirou tenkubashi
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
Learn C Programming Language by Using GDB
Learn C Programming Language by Using GDB
National Cheng Kung University
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
Takaya Saeki
Java でつくる低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧
Ryosuke Yamazaki
Metaspace
Metaspace
Yasumasa Suenaga
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
将 高野
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
주항 박
ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎とクラス設計への応用
nagise
非同期処理の基礎
非同期処理の基礎
信之 岩永
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
NSaitoNmiri
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
2017spring jjug ccc_f2
2017spring jjug ccc_f2
Kazuhiro Wada
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Ikuru Kanuma
Contenu connexe
Tendances
DrupalをDockerで起動してみる
DrupalをDockerで起動してみる
iPride Co., Ltd.
みんな大好きJava gc入門 【前編】
みんな大好きJava gc入門 【前編】
kouzirou tenkubashi
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
Learn C Programming Language by Using GDB
Learn C Programming Language by Using GDB
National Cheng Kung University
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
Takaya Saeki
Java でつくる低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧
Ryosuke Yamazaki
Metaspace
Metaspace
Yasumasa Suenaga
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
Unified JVM Logging
Unified JVM Logging
Yuji Kubota
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
将 高野
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
주항 박
ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎とクラス設計への応用
nagise
非同期処理の基礎
非同期処理の基礎
信之 岩永
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
NSaitoNmiri
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
Tendances
(20)
DrupalをDockerで起動してみる
DrupalをDockerで起動してみる
みんな大好きJava gc入門 【前編】
みんな大好きJava gc入門 【前編】
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
Learn C Programming Language by Using GDB
Learn C Programming Language by Using GDB
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
カーネル空間ですべてのプロセスを動かすには -TAL, SFI, Wasmとか - カーネル/VM探検隊15
Java でつくる低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧
Metaspace
Metaspace
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Unified JVM Logging
Unified JVM Logging
はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎とクラス設計への応用
非同期処理の基礎
非同期処理の基礎
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
En vedette
2017spring jjug ccc_f2
2017spring jjug ccc_f2
Kazuhiro Wada
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Ikuru Kanuma
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
Kosuke Kida
Jjug ccc
Jjug ccc
Tanaka Yuichi
Java libraries you can't afford to miss
Java libraries you can't afford to miss
Andres Almiray
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.
JustSystems Corporation
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
Logico
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Works Applications
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
Yoshio Kajikuri
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
日本Javaユーザーグループ
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Hiroyuki Ohnaka
Introduction of Project Jigsaw
Introduction of Project Jigsaw
Yuichi Sakuraba
グラフデータベース入門
グラフデータベース入門
Masaya Dake
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
En vedette
(20)
2017spring jjug ccc_f2
2017spring jjug ccc_f2
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
Jjug ccc
Jjug ccc
Java libraries you can't afford to miss
Java libraries you can't afford to miss
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.
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Introduction of Project Jigsaw
Introduction of Project Jigsaw
グラフデータベース入門
グラフデータベース入門
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Similaire à VMの歩む道。 Dalvik、ART、そしてJava VM
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
Koichi Sakata
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)
Koichi Sakata
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka
Seiji Noro
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
normalian
Web制作勉強会 #2
Web制作勉強会 #2
Moto Yan
javascript を Xcode でテスト
javascript を Xcode でテスト
Yoichiro Sakurai
ななめ45°から見たJavaOne
ななめ45°から見たJavaOne
AdvancedTechNight
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
110709 silverlight square_tanaka_pub
110709 silverlight square_tanaka_pub
Takayoshi Tanaka
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger Feature
Kazushi Kamegawa
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
MasuqaT
LightSwitchで遊んでみた
LightSwitchで遊んでみた
Yoshitaka Seo
Mvc conf session_5_isami
Mvc conf session_5_isami
Hiroshi Okunushi
Play jjug2012spring
Play jjug2012spring
Takafumi Ikeda
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
Tatsuya Ishikawa
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
java-ja TDD 2nd
java-ja TDD 2nd
Takuto Wada
Similaire à VMの歩む道。 Dalvik、ART、そしてJava VM
(20)
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
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)
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
Web制作勉強会 #2
Web制作勉強会 #2
javascript を Xcode でテスト
javascript を Xcode でテスト
ななめ45°から見たJavaOne
ななめ45°から見たJavaOne
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
110709 silverlight square_tanaka_pub
110709 silverlight square_tanaka_pub
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger Feature
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
LightSwitchで遊んでみた
LightSwitchで遊んでみた
Mvc conf session_5_isami
Mvc conf session_5_isami
Play jjug2012spring
Play jjug2012spring
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
PlayFramework1.x基礎編
PlayFramework1.x基礎編
java-ja TDD 2nd
java-ja TDD 2nd
Plus de yy yank
Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
yy yank
Kotlinソースコード探訪
Kotlinソースコード探訪
yy yank
Javaで最強のfizz buzz
Javaで最強のfizz buzz
yy yank
KuromojiをKotlinで動かす
KuromojiをKotlinで動かす
yy yank
Doma2 with Kotlin
Doma2 with Kotlin
yy yank
絶対にぬるぽを出さない
絶対にぬるぽを出さない
yy yank
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけど
yy yank
Kotlinあるある言いたい
Kotlinあるある言いたい
yy yank
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
yy yank
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
yy yank
Server Side Kotlin
Server Side Kotlin
yy yank
Plus de yy yank
(11)
Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
Kotlinソースコード探訪
Kotlinソースコード探訪
Javaで最強のfizz buzz
Javaで最強のfizz buzz
KuromojiをKotlinで動かす
KuromojiをKotlinで動かす
Doma2 with Kotlin
Doma2 with Kotlin
絶対にぬるぽを出さない
絶対にぬるぽを出さない
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけど
Kotlinあるある言いたい
Kotlinあるある言いたい
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
Server Side Kotlin
Server Side Kotlin
VMの歩む道。 Dalvik、ART、そしてJava VM
1.
VMの歩む道。 Dalvik、ART、そしてJava VM JJUG CCC
2017 Spring #ccc_a7 #jjug_ccc @yy_yank
2.
#ccc_a7 #jjug_ccc でつぶやいてください ハッシュタグ
3.
自己紹介 やんく(@yy_yank) こいつです ・JJUG
CCC登壇3回目 ・vi好き ・でもサクラエディタicon ・JavaとKotlinが好き
4.
質問です!!
5.
JVM初心者ですか? 僕より詳しくないですか? Question1
6.
Android開発したこと がありますか? Question2
7.
サーバーサイドを Javaで開発したことが ありますか? Question3
8.
・VMにチョットクワシクナル(not エキスパート) ・VMの比較対象を増やす ・知らずに批評をしない、知ってる知識を ベースにフェアになる 本セッションのゴール
9.
・Oracle vs Google ・Apache
Harmonyの細かい話 過去のJJUGナイトセミナーのこの内容を読 むと良いと思います。 http://www.publickey1.jp/blog/16/googl eoraclejava_apiitjjug.html 本セッションで話題にしないこと
10.
・実践的なVMのパフォーマンスチューニング Javaパフォーマンスという 本があるので それを読んでいただければ おそらく・・・! 本セッションで話題にしないこと
11.
アジェンダ 1. Javaの人にとってのDalvik/ART 2.Androidの人にとってのJVM(not Dalvik/ART) 3.こんなに違う、マシン命令 4.バイナリ(class、dex) 5.ランタイムごとのAOT、JIT、GC 6.まとめ
12.
アジェンダ ▷ 1. Javaの人にとってのDalvik/ART 2.Androidの人にとってのJVM(not
Dalvik/ART) 3.こんなに違う、マシン命令 4.バイナリ(class、dex) 5.ランタイムごとのAOT、JIT、GC 6.まとめ
13.
・別に知らなくていい(身も蓋もない) ・知ってた方がプラットフォームを意識した設 計・プログラミングが出来るのでは ・HotSpot以外のVMを知ってた方が翻って HotSpotの理解につながるのでは 1. Javaの人にとってのDalvik/ART
14.
☆今更ながら前提 ・現状Oracleの提供するJVM = HotSpot ・AndroidのVM
= ART(昔はDalvik) ・それぞれダルビック、アートと読む ARTはDalvikがベースとなっている 1. Javaの人にとってのDalvik/ART
15.
Q.HotSpot VM以外無いの? A.あります ・HotSpotは(元Sun、現Oracle所有) ・IBM J9
VM(IBM) ・JRockit(元BEA、現Oracle所有) など 1. Javaの人にとってのDalvik/ART
16.
Q.HotSpot VM以外無いの? A.あります ・HotSpotは(元Sun、現Oracle所有) ・IBM J9
VM(IBM) ・JRockit(元BEA、現Oracle所有) など 1. Javaの人にとってのDalvik/ART とても大胆に分けてしまうと、大体 の人はHotSpotを使っていて、 JVMの処理系を意識していない ものと思います
17.
1. Javaの人にとってのDalvik/ART ◯JRockit・・・1.6までしかない。1.7で HotSpotと統合されたようです ◯J9 VM・・・Websphere、DB2などで利用 されてきました。Open
J9というプロジェクト もありアクティブですが、シェアはHotSpot が多いと思われます
18.
◯JRockit・・・1.6までしかない。1.7で HotSpotと統合されたようです ◯J9 VM・・・Websphere、DB2などで利用 されてきました。Open J9というプロジェクト もありアクティブですが、シェアはHotSpot が多いと思われます 1.
Javaの人にとってのDalvik/ART ということで、本セッションでは HotSpot、Dalvik/ARTを中心に話 をします
19.
1. Javaの人にとってのDalvik/ART cf. J9
VMの情報は以下が詳しい IBM SDK for Java 8の全貌 https://www.slideshare.net/takakiyo/jj ugccc-201ibm-sdk-for-java-8
20.
アジェンダ 1. Javaの人にとってのDalvik/ART ▷2.Androidの人にとってのJVM(not Dalvik/ART) 3.こんなに違う、マシン命令 4.バイナリ(class、dex) 5.ランタイムごとのAOT、JIT、GC 6.まとめ
21.
・JavaもどきとかAndroid Javaとはなぜ言う人 がいるか(またそれに対しての対応) ・違いを知る。実機では動かないけどIDEでは 動く、なぜ?とか ・なぜHotSpotがあるのにAndroidはVMを独 自に用意した? 2.Androidの人にとってのJVM
22.
・言葉が悪い ・JavaであってちょっとJavaでなくてちょっと JavaなのがAndroid ・Android Javaぐらいが妥当な表現か Javaもどき問題
23.
Javaもどき問題 ・JLSは満たしているようだが、 JVMSは満たしていない (歴史的経緯でTCKをパスしていない) ・標準ライブラリが違う 例えばjava.beansパッケージに含まれているク ラスが少ないなど
24.
アジェンダ 1. Javaの人にとってのDalvik/ART 2.Androidの人にとってのJVM(not Dalvik/ART) ▷
3.こんなに違う、マシン命令 4.バイナリ(class、dex) 5.ランタイムごとのAOT、JIT、GC 6.まとめ
25.
ちょっとその前に
26.
・HotSpotはスタックマシン ・Dalvik/ARTは(特殊な)レジスタマシン スタックマシンは命令を積み上げ レジスタマシンは命令をレジスタへの登録 Dalvik/ARTの場合はメモリ領域をレジスタと呼ん でいる(特殊とはそのあたりのこと) 3.こんなに違う、マシン命令
27.
・HotSpotはスタックマシン ・Dalvik/ARTは(特殊な)レジスタマシン スタックマシンは命令を積み上げ レジスタマシンは命令をレジスタへの登録 Dalvik/ARTの場合はメモリ領域をレジスタと呼ん でいる(特殊とはそのあたりのこと) 3.こんなに違う、マシン命令 そもそもマシンの モデルが違った
28.
簡略例:スタックマシン 3.こんなに違う、マシン命令 メモリ ス タ ッ ク
29.
簡略例:スタックマシン 3.こんなに違う、マシン命令 メモリ 1ス タ ッ ク 1をPUSH
30.
簡略例:スタックマシン 3.こんなに違う、マシン命令 メモリ 2 1 ス タ ッ ク 2をPUSH
31.
簡略例:スタックマシン 3.こんなに違う、マシン命令 メモリ 1ス タ ッ ク 2をPOP
32.
簡略例:スタックマシン 3.こんなに違う、マシン命令 メモリ ス タ ッ ク 1をPOP
33.
簡略例:スタックマシン 3.こんなに違う、マシン命令 メモリ 3ス タ ッ ク POPした1 と 2 を加算して PUSH
34.
簡略例:レジスタマシン 3.こんなに違う、マシン命令 メモリ レ ジ ス タ R0 R1 R2 R3
35.
簡略例:レジスタマシン 3.こんなに違う、マシン命令 メモリ 1レ ジ ス タ R0 R1 R2 R3 R0に1を登録
36.
簡略例:レジスタマシン 3.こんなに違う、マシン命令 メモリ 1 2 レ ジ ス タ R0 R1 R2 R3 R1に2を登録
37.
簡略例:レジスタマシン 3.こんなに違う、マシン命令 メモリ 1 2 3(R0 + R1) レ ジ ス タ R0 R1 R2 R3 R2にR0+R1を 登録
38.
簡略例:Dalvik/ARTのレジスタマシン 3.こんなに違う、マシン命令 メモリ メソッドB メソッドB メソッドA メソッドA レ ジ ス タ R1 R0 R1 R0
39.
簡略例:Dalvik/ARTのレジスタマシン 3.こんなに違う、マシン命令 メモリ メソッドB メソッドB メソッドA メソッドA レ ジ ス タ R1 R0 R1 R0 メソッドごとにスタック。 でもレジスタマシン。
40.
簡略例:Dalvik/ARTのレジスタマシン 3.こんなに違う、マシン命令 メモリ メソッドB メソッドB メソッドA メソッドA レ ジ ス タ R1 R0 R1 R0 レジスタと言いつつ 演算用のメモリ領域に確保し ている
41.
簡略例:Dalvik/ARTのレジスタマシン 3.こんなに違う、マシン命令 メモリ メソッドB メソッドB メソッドA メソッドA レ ジ ス タ R1 R0 R1 R0 むずかしい!?
42.
このスライドが詳しいです。 Dalvik仮想マシンのアーキテクチャ 改訂版 https://www.slideshare.net/kmt-t/dalvi k-10316622 というかTakuya Matsunagaという方がすごい 3.こんなに違う、マシン命令
43.
なんで違う? HotSpotはスタックマシン ・ハードウェアを問わず動かしやすいアーキ テクチャ ・Run Anywhere的なところを優先した結果 なのか・・・? 3.こんなに違う、マシン命令
44.
☆なんで違う? Dalvik/ARTは(特殊な)レジスタマシン ・instruction dispatchを避けたかった ・不要なメモリアクセスを避けたかった ・命令処理の流れを素早くさばきたい 3.こんなに違う、マシン命令
45.
☆なんで違う? Dalvik/ARTは(特殊な)レジスタマシン ・instruction dispatchを避けたかった ・不要なメモリアクセスを避けたかった ・命令処理の流れを素早くさばきたい 3.こんなに違う、マシン命令 ・instruction dispatchとは メモリからの命令のフェッチ や読み込み、ジャンプなどな ど
46.
やっと マシン命令の話
47.
3.こんなに違う、マシン命令 ・HotSpot マシン命令の一例 invokevirtual = インスタンスのメソッド呼び出し invokeinterface
= interfaceのメソッド呼び出し invokestatic = staticメソッドの呼び出し invokespecial = コンストラクタの呼び出し よく見るやつですね
48.
・Dalvik/ART マシン命令の一例 invoke-virtual = インスタンスのメソッド呼び出し invoke-interface
= interfaceのメソッド呼び出し invoke-static = staticメソッドの呼び出し new-instance = インスタンスの生成 3.こんなに違う、マシン命令
49.
大体一緒やん
50.
いえいえ、違うところ も…
51.
3.こんなに違う、マシン命令 ・HotSpot マシン命令の一例 invokevirtual = 0xb6 invokeinterface
= 0xb7 invokestatic =0xb8 invokespecial = 0xb9
52.
・Dalvik/ART マシン命令の一例 invoke-virtual = 0x6e invoke-interface
= 0x72 invoke-static = 0x71 new-instance = 0x22 3.こんなに違う、マシン命令
53.
・Dalvik/ART マシン命令の一例 invoke-virtual = 0x6e invoke-interface
= 0x72 invoke-static = 0x71 new-instance = 0x22 オペコードの値は違う(そりゃそうか) 3.こんなに違う、マシン命令
54.
・Dalvik/ARTとHotSpotでどちらにもあるもの return系命令 const系命令 if系命令 などなど。 3.こんなに違う、マシン命令
55.
・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)
56.
・Dalvik/ARTとHotSpotでどちらにもあるもの return系命令 const系命令 if系命令 などなど。 3.こんなに違う、マシン命令HotSpot: iconst_ほげほげ lconst_ほげほげ dconst_ほげほげ Dalvik/ART: const/4 const/16 const
57.
・Dalvik/ARTとHotSpotでどちらにもあるもの return系命令 const系命令 if系命令 などなど。 3.こんなに違う、マシン命令 などなど・・・。 (気になる人は命令セッ トを比較してみて下さい)
58.
・Dalvik/ARTとHotSpotでどちらにもあるもの return系命令 const系命令 if系命令 などなど。 3.こんなに違う、マシン命令 命令の名称やオペコードの 値は色々違っているのだけ ど、大体やる処理としては 同じ
59.
・Dalvik/ARTにしかなさそうなもの move命令 ->レジスタペアを別のレジスタに移動 invoke-polymophicとinvoke-custom ->Androidの8.0から新しく使えるようになるオペコード。 MethodHandleを呼び出すのだとか・・! 3.こんなに違う、マシン命令
60.
3.こんなに違う、マシン命令 ・こんなに違う、は主にVMのマシンアーキテクチャだった ・それにともなって、マシン命令も違う(というより、オペ コードの値は違う) ・実行バイナリが違うことも1つ大きな要因だと思います (この後に紹介します)
61.
アジェンダ 1. Javaの人にとってのDalvik/ART 2.Androidの人にとってのJVM(not dalvik/ART) 3.こんなに違う、マシン命令 ▷
4.バイナリ(class、dex) 5.ランタイムごとのAOT、JIT、GC 6.まとめ
62.
4.バイナリ(class、dex) ・HotSpotはclassファイル ・Dalvik/ARTはdex(Dalvik Executable)ファイル がそれぞれVMにロードされて マシンコードになって実行される
63.
4.バイナリ(class、dex) ソースコード (javaファイル) dexツール dexファイル HotSpot VM
Dalvik/ART VM classファイル
64.
☆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)
65.
☆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に必ずある もの
66.
☆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
67.
☆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) 定数プール のカウント
68.
☆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) 定数プール
69.
☆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とか アレ
70.
☆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) このクラス自身と 継承しているスーパー クラスの情報
71.
☆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の配列
72.
☆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) フィールドのカウントと フィールドの配列
73.
☆classファイルフォーマット 14.methods_count; 15.method_info methods[methods_count]; 16.attributes_count; 17.attribute_info attributes[attributes_count]; 4.バイナリ(class、dex)
74.
☆classファイルフォーマット 14.methods_count; 15.method_info methods[methods_count]; 16.attributes_count; 17.attribute_info attributes[attributes_count]; 4.バイナリ(class、dex) メソッドのカウントと メソッドの配列
75.
☆classファイルフォーマット 14.methods_count; 15.method_info methods[methods_count]; 16.attributes_count; 17.attribute_info attributes[attributes_count]; 4.バイナリ(class、dex) attributeという特殊な もののカウントと その配列
76.
簡単ですね(?)
77.
☆classファイルフォーマット ・versioningされている ・情報ごとにカウントを持っている ・各情報の配列を持つ ・アクセシビリティの情報も持つ ・ただしバイナリを直接読むのは辛いし javapで良い気がする 4.バイナリ(class、dex)
78.
続いてdex
79.
☆dexファイルフォーマット 1.header 2.string ids 3.type ids 4.proto_ids 5.field_ids 6.method_ids 7.class_defs 4.バイナリ(class、dex)
80.
☆dexファイルフォーマット 1.header 2.string ids 3.type ids 4.proto_ids 5.field_ids 6.method_ids 7.class_defs 4.バイナリ(class、dex) ヘッダー情報
81.
☆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
82.
☆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
83.
☆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でのテンプレート)
84.
☆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
85.
☆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
86.
☆dexファイルフォーマット 1.header 2.string ids 3.type ids 4.proto_ids 5.field_ids 6.method_ids 7.class_defs 4.バイナリ(class、dex) クラス定義リスト
87.
☆dexファイルフォーマット 8.call_site_ids 9.method_handles 10.data 11.link_data 4.バイナリ(class、dex)
88.
☆dexファイルフォーマット 8.call_site_ids 9.method_handles 10.data 11.link_data 4.バイナリ(class、dex) 全てcall siteの 参照情報 (call siteはメソッドの場 所的なもの)
89.
☆dexファイルフォーマット 8.call_site_ids 9.method_handles 10.data 11.link_data 4.バイナリ(class、dex) ハンドリングするメソッド のリスト
90.
☆dexファイルフォーマット 8.call_site_ids 9.method_handles 10.data 11.link_data 4.バイナリ(class、dex) 全部のデータテーブルを 持つ
91.
☆dexファイルフォーマット 8.call_site_ids 9.method_handles 10.data 11.link_data 4.バイナリ(class、dex) 静的リンクされた情報
92.
☆dexファイルフォーマット ・基本的に持っている情報は同じ (身も蓋もない) ・ただ並び順も持ち方も違う ・もちろんそれぞれのバイトコードは それぞれのVMでしか動かない 4.バイナリ(class、dex)
93.
アジェンダ 1. Javaの人にとってのDalvik/ART 2.Androidの人にとってのJVM(not dalvik/ART) 3.こんなに違う、マシン命令 4.バイナリ(class、dex) ▷
5.ランタイムごとのAOT、JIT、GC 6.まとめ
94.
・JIT(Just-In-Time Compiler)とは 実行時にネイティブコードにコンパイルする ・AOT(Ahead-Of-Time Compiler)とは 実行前にネイティブコードにコンパイルする ・GCとは ガベージコレクション。JavaもAndroidも共通のメモリ管 理の機構 5.ランタイムごとのAOT、JIT、GC
95.
・JIT(Just-In-Time Compiler)とは 実行時にネイティブコードにコンパイルする ・AOT(Ahead-Of-Timeコンパイラ)とは 実行前にネイティブコードにコンパイルする ・GCとは ガベージコレクション。JavaもAndroidも共通のメモリ管 理の機構 5.ランタイムごとのAOT、JIT、GC 本来、AOT、JITとGCを並べるのは 変な感じですが、 資料の構成上並べて紹介する形とします
96.
・HotSpotでJITが動いてるかどうか ->だいたい動いてる ・ホットなスポットだけJITする ・起動時にvm optionに -XX:+PrintCompilation
って付 けるとめっちゃJITされたログが出てくる ・-Djava.compiler=none を付け加えるとJITが無効に なって何もログが出なくなる 5.ランタイムごとのAOT、JIT、GC
97.
☆JITの場合(HotSpot) ぼく「javac Hello.java」 ぼく「java Hello」 HotSpot「メソッド実行前にチェックします」 HotSpot「これはネイティブコードにしときますね〜」 5.ランタイムごとのAOT、JIT、GC
98.
☆JITの場合(Dalvik) ぼく「アプリインストールした。」 ぼく「起動してみよう」 Dalvik「メソッド実行前にチェックします」 Dalvik「これはネイティブコードにしときますね〜」 5.ランタイムごとのAOT、JIT、GC
99.
☆AOTの場合(ART) ぼく「アプリインストールしよっと」 ART「あ、これインストール中でもネイティブコードに出来 ますわー」 ART「ネイティブコードにしときますね〜」 ぼく「よし、インストール出来た。使ってみよ」 5.ランタイムごとのAOT、JIT、GC
100.
☆AOTの場合(ART) ぼく「アプリインストールしよっと」 ART「あ、これインストール中でもネイティブコードに出来 ますわー」 ART「ネイティブコードにしときますね〜」 ぼく「よし、インストール出来た。使ってみよ」 実行時のオーバーヘッドが少ない!!! 5.ランタイムごとのAOT、JIT、GC
101.
Google IO 2014 the ART Runtime より
102.
ココ!!! Google IO 2014 the ART Runtime より
103.
☆JIT or AOTについて ・HotSpotはJIT/Interpreterを採用 ・Dalvik(Android
5.0以前)まではJIT/Interpreter ・ART以降(Android 5.0)はAOTを利用している 5.ランタイムごとのAOT、JIT、GC
104.
☆JIT or AOTについて ・HotSpotはJIT/Interpreterを採用 ・Dalvik(Android
5.0以前)まではJIT ・ART以降(Android 5.0)はAOTを利用している 5.ランタイムごとのAOT、JIT、GC Android 5.0は 2014年から
105.
☆JIT or AOTについて ・HotSpotはJIT/Interpreterを採用 ・Dalvik(Android
5.0以前)まではJIT ・ART以降(Android 5.0)はAOTを利用している 5.ランタイムごとのAOT、JIT、GCAOT JIT Interpreter を選べる
106.
☆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 を選べる
107.
どういうことか
108.
☆Android 5.0のART ぼく「アプリインストールしよっと」 ART「あ、これインストール中でもネイティブコードに出来 ますわー」 ぼく「インストールめっちゃ長い。電池消費やばい。もうマ ヂムリ」 (ということもあったらしい) 5.ランタイムごとのAOT、JIT、GC
109.
Google IO 2016 The
Evolution of ARTより
110.
☆Android 7.0のAOT +
JIT ぼく「アプリインストールしよっと」 ART「あ、これインストール中でもネイティブコードに出来 ますわー。でも電池消費するからちょっとだけ。あとは JITさんに任せますわ」 ぼく「よしインストール出来たし、アプリ使ってみよっと」 5.ランタイムごとのAOT、JIT、GC
111.
☆Android 7.0のAOT +
JIT ぼく「アプリインストールしよっと」 ART「あ、これインストール中でもネイティブコードに出来 ますわー。でも電池消費するからちょっとだけ。あとは JITさんに任せますわ」 ぼく「よしインストール出来たし、アプリ使ってみよっと」-> ユーザーのストレスが少ない形に 5.ランタイムごとのAOT、JIT、GC
112.
DalvikとARTの違いはこのあたり ・そもそもDalvikはシングルコア向けに作られていた ・Androidは8コアになった。だからART ・スイープのpauseがARTの方が短くなったらしい ・dexファイルが動く、など基本的なところは同じ ・違いはAOTが入ったこと、GC改善、ロギング改善など 5.ランタイムごとのAOT、JIT、GC
113.
???「なるほど。 AOTいいんじゃない?」
114.
???「HotSpotでやれば 良いじゃないか」
115.
☆HotSpotのAOT ・・・・・・・・・・・・・。 5.ランタイムごとのAOT、JIT、GC
116.
☆HotSpotのAOT あると思います!!!! 5.ランタイムごとのAOT、JIT、GC
117.
HotSpotのAOT
118.
HotSpotのAOT
119.
HotSpotのAOT
120.
☆JEP295 ・Java 9では入らない ・javaコマンドオプションでAOTライブラリを指定 ・It uses
Graal as the code-generating backend. 5.ランタイムごとのAOT、JIT、GC
121.
☆Graalとは ・Next generation compilation
technology supporting Java, Ruby, R, JavaScript, LLVM, and more... というJavaで書かれてるヤバいやつ 5.ランタイムごとのAOT、JIT、GC
122.
99%Javaです! 5.ランタイムごとのAOT、JIT、GC
123.
つづいてGC!
124.
☆GCについて HotSpotだと ・シリアル GC ・パラレル GC ・CMS
GC(Java 9でdeprecated?) ・G1GC(Java 9でデフォルト?) ココから選ぶことになる 5.ランタイムごとのAOT、JIT、GC
125.
5.ランタイムごとのAOT、JIT、GC ☆ARTだと dalvik.vm.gctypeプロパティを変更するか、-Xgcオプショ ンで ・CMS GC(デフォルト) ・Semi Space
GC(いわゆるコピーGC) ・Generational Semi Space GC(いわゆるコピーGC)
126.
5.ランタイムごとのAOT、JIT、GC ☆ARTだと dalvik.vm.gctypeプロパティを変更するか、-Xgcオプショ ンで ・CMS GC(デフォルト) ・Semi Space
GC(いわゆるコピーGC) ・Generational Semi Space GC(いわゆるコピーGC) 可動オブジェクトを動かす空間 と非可動オブジェクトの空間を 持つ。 移動させてシュッとGC
127.
5.ランタイムごとのAOT、JIT、GC ☆ARTだと dalvik.vm.gctypeプロパティを変更するか、-Xgcオプショ ンで ・CMS GC(デフォルト) ・Semi Space
GC(いわゆるコピーGC) ・Generational Semi Space GC(いわゆるコピーGC) こっちはそれを世代別に
128.
5.ランタイムごとのAOT、JIT、GCDalvik Google IO 2014
the ART Runtimeより
129.
5.ランタイムごとのAOT、JIT、GCART Google IO 2014
the ART Runtimeより
130.
アジェンダ 1. Javaの人にとってのDalvik/ART 2.Androidの人にとってのJVM(not dalvik/ART) 3.こんなに違う、マシン命令 4.バイナリ(class、dex) 5.ランタイムごとのAOT、JIT、GC ▷
6.まとめ
131.
なんのためのDalvik、ARTか ・Androidに最適化されている ・ARTは最近?のAndroid端末に合わせての更なる最適 化 ・当たり前だがプラットフォームが違えば要求される実行 環境(VM)も違う ・プラットフォームを優先した結果独自VMとして別々の道 を歩むことになった 6.まとめ
132.
・プラットフォームに合わせるために犠牲はつきもの? ->Android SDKに無くて、JDKにあるものはあるが、バラ ンスを考えてそうなっている ・どちらも頑張った結果 ->HotSpotはPCマシン(あるいはサーバー)前提で最適化 を頑張った結果、Dalvik/ARTはAndroidプラットフォーム 前提で頑張った結果 6.まとめ
133.
・VMをブラックボックスとして扱う技術者にならないように (自戒を込めて) ・どう動いているのか意識して、その上でIDEに任せて楽 をしたい ・何が起こってるか理解できないと問題を解決できない 6.まとめ
Télécharger maintenant