Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android VM
Search
wagyu298
March 03, 2016
Programming
0
680
Android VM
Delvik / ART
wagyu298
March 03, 2016
Tweet
Share
More Decks by wagyu298
See All by wagyu298
Swagger Codegen
wagyu298
1
2.7k
HTTP/2 Mobile
wagyu298
0
960
Option Type
wagyu298
0
1.2k
process.nextTick differences between node-v0.8 and node-v0.11
wagyu298
1
1.7k
Other Decks in Programming
See All in Programming
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
7
2.5k
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
120
1から理解するWeb Push
dora1998
7
1.9k
チームのテスト力を鍛える
goyoki
3
890
概念モデル→論理モデルで気をつけていること
sunnyone
3
300
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
2
260
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
170
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
550
為你自己學 Python - 冷知識篇
eddie
1
350
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
GraphQLとの向き合い方2022年版
quramy
49
14k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.1k
Fireside Chat
paigeccino
39
3.6k
Statistics for Hackers
jakevdp
799
220k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Designing Experiences People Love
moore
142
24k
Music & Morning Musume
bryan
46
6.8k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Transcript
Android VM @wagyu298
Android VM ≠ Java VM
Android VM Delvik: Android 4.4 ART: Android 5.0 or later
Hardware • Nexus 5X (Android) • Qualcomm® Snapdragon™ 808 ϓϩηοα
1.8 GHz ϔΩαίΞ 64 Ϗοτ • 2GB LPDDR3 • ࠷৽ARM8ɺݹ͍σόΠεARMҎ֎ʹMIPSx86 CPUͷͷ͋Δ • ϚϧνCPUରԠʹVM༗ར • iPhone 6s • A9 • 2GB LPDDR4 • ಉ͘͡ARM8ɺݹ͍iPhoneͯ͢ARMޓ • ୯ҰΞʔΩςΫνϟͳͷͰɺXcode͔Β࣮ߦՄೳόΠφϦΛग़ྗ͢Δ • 64bitରԠͷͨΊɺ32bitόΠφϦΛ64bitόΠφϦΛ࡞͢ΔΑ͏ʹͳͬͨ
Android VM • Delvik: Android 4.4 • ART: Android 5.0
or later • https://source.android.com/devices/tech/dalvik/ index.html
Android VM https://ja.wikipedia.org/wiki/Android_Runtime
Delvik • ϨδελϕʔεͷόʔνϟϧϚγϯʢJava VMελοΫϕʔεʣ • ARM831ݸͷ64bit൚༻Ϩδελͱ32ݸͷ128bitුಈখϨδε λ͕༻ՄೳͰARM7ͱൺDelvikʹ༗ར • ϝϞϦڥʹ࠷దԽ •
ಈ࡞͢ΔόΠτίʔυDexϑΥʔϚοτͰJavaόΠτίʔυͰͳ͍ ͨΊɺDelvik VMJava VMͰͳ͍ • JavaޓੑςετΛ௨ա͍ͯ͠ͳ͍ͷͰɺJava™Λ༻Ͱ͖ͳ͍ • dxίϚϯυͰ.classϑΝΠϧΛ.dexϑΝΠϧʹม͢Δ • APKʹෳʢ௨ৗ1ͭʣͷ.dexϑΝΠϧؚ͕·ΕΔ • Android 2.1͔ΒJITαϙʔτ
Dex Specs • https://source.android.com/devices/tech/dalvik/dex- format.html
ART • AOT (Ahead-Of-Time) ίϯύΠϧ • ࣮ߦલʢΠϯετʔϧ࣌ʣʹ.dexϑΝΠϧΛELF dynamic objectʹม •
࣮ߦ্͕͍ͯ͠Δ͕ɺAOTͷੑ্࣭ΞϓϦͷΠϯε τʔϧʹ͕͔͔࣌ؒΔΑ͏ʹͳΓ࣮ߦϑΝΠϧαΠζେ ͖͘ͳ͍ͬͯΔ • dex2oatʢdexΛELFʹม͢ΔίϚϯυʣLLVMͰ࣮ • JITίϯύΠϥଐ͍ͯ͠Δ͕ɺDelvikͷ࣮ͱҧ͍͋·Γ ࠷దԽ͞Ε͍ͯͳ͍
Zygote • AndroidΞϓϦͷىಈϓϩηε • AndroidࣗମLinuxϚγϯͰ͋ΓɺσόΠεىಈ࣌/ init͔Β࢝·ΔҰ࿈ͷىಈϓϩηε͕ී௨ʹ࣮ߦ͞Εɺ/ init.rcεΫϦϓτ͔Βىಈ͞ΕΔίϚϯυapp_process ͷ͜ͱ • https://android.googlesource.com/platform/system/
core/+/master/rootdir/init.zygote64_32.rc
Zygote • zygoteϓϩηεΞϓϦىಈʹඞཁͳͯ͢ͷϥΠϒ ϥϦ͕dynamic link͞Ε͓ͯΓɺࢠϓϩηεΛforkͯ͠ ʢexecͤͣʹʣΞϓϦΛىಈ͢Δ • app_processzygoteϞʔυͰىಈ͞ΕΔͱ com.android.internal.os.ZygoteInitΛ࣮ߦ͢Δ •
https://android.googlesource.com/platform/ frameworks/base/+/master/cmds/app_process/ app_main.cpp
Zygote • ZygoteInit͋ʔͩ͜ʔͩͨ͋͠ͱ • https://android.googlesource.com/platform/frameworks/ base/+/master/core/java/com/android/internal/os/ ZygoteInit.java • app_processͷAppRuntimeΫϥεΛܦ༝͠AndroidRuntime͔ ΒActivityThreadΫϥεͷmainؔΛݺͼग़͢ɻ
• https://android.googlesource.com/platform/frameworks/ base/+/master/core/jni/AndroidRuntime.cpp • https://android.googlesource.com/platform/frameworks/ base/+/master/core/java/android/app/ActivityThread.java
References • http://d.hatena.ne.jp/embedded/20131104/p1 • http://blog.kmckk.com/archives/3551546.html • http://blog.kmckk.com/archives/4164432.html • http://elinux.org/Android_Zygote_Startup •
http://crimsonwoods.hatenablog.com/entry/ 2014/11/10/013025 • http://blog.hermit4.info/2011/01/zygote.html • http://dsas.blog.klab.org/archives/52003951.html