View
156
Download
0
Category
Preview:
DESCRIPTION
Android Virtual Machine. Java 基本分类 Java 虚拟机简介 Dalvik 虚拟机简介. Java 基本分类. J2ME/J2EE/J2SE 的比较 J2SE TM (The Java TM 2 Platform, Standard Edition) 标准 java 程序库,主要面向桌面开发的,提供 GUI 支持, applet 等通常的 java 应用 . - PowerPoint PPT Presentation
Citation preview
1
Android Virtual Machine
2
Java 基本分类 Java 虚拟机简介 Dalvik 虚拟机简介
3
Java 基本分类
J2ME/J2EE/J2SE 的比较 J2SETM (The JavaTM2 Platform, Standard Edition)
标准 java 程序库,主要面向桌面开发的,提供 GUI 支持, applet 等通常的 java 应用 .
J2EETM (The JavaTM2 Platform, Enterprise Edition) 主要为企业网解决方案的服务器端开发而设计,提供数据库访问,消息,跨进程通信及事物处理等等功能。
J2METM (The JavaTM2 Platform, Micro Edition) 主要针对移动平台
4
Java 基本分类 J2ME 体系结构
Profile (MIDP Application)
CLDC/CDC Libraries
KVM(K virtual Machine)
Operating System (Windows, Linux)
5
Java 基本分类
MIDP MIDP (Mobile Device Information Profile) 现已成
为一种普遍的工业标准,基于 MIDP 开发的程序可以在任何设备上运行,它架构 CLDC 之上。
MIDP 中定义的 APIs 包括:javax.microedition.lcdui.*, javax.microedition.midlet.*, javax.microedition.rms
6
Java 基本分类 CLDC 与 CDC
CLDC (Connected Limited Device Configuration), 它为所有低端消费电子产品的运行提供了最小的库集和 APIs 。
CDC (Connected Device Configuration), 它是 CLDC 的超集,它为高端消费电子产品提供运行环境。
J2EE J2SE CDC
CLDC
7
Java 基本分类 Android Java 的地位
Android 不是 java Android 没有 java 授权
( 无 java logo) Android 虚拟机不标准 Android binary 不兼容
java Android core libraries
自己扩展维护
Libraries Java Android
java.io.* Y Y
java.net.* Y Y
Android.* Y N
com.google.* Y N
javax.swing.* N Y
… … …
8
Java 虚拟机简介
9
Java 虚拟机简介
Class Loader
RUNTIME DATA AREA
Method Area
HEAP
Java StackNative Method
Stack
Program Counter Register
Execute EngineNative
Interface
Native Libraies
Class Files
10
Java 虚拟机简介
Class Loader 加载 class 文件到虚拟机
Execute Engine 也叫解释器 (interpreter), 解释 bytecode ,提交系
统执行 Native Interface
本地代码调用接口,解释器解释到此标记的 native 方法后,通此接口加载、调用本地方法。
Runtime Area 整个 JVM 的重点。
11
Java 虚拟机简介
Runtime Data Area
Shared Thread 1 Thread 2
pc
JavaStack
NativeMethodStack
pc
JavaStack
NativeMethodStack
Garbage CollectedHeap
Method area
12
Java 虚拟机简介
Program Counter Register 每个线程有一个 PC 寄存器 Size : 1 word (一个指针的大小) Value
native method (JNI) Undefined
non-native method : 当前执行的 bytecode 的地址。
13
Java 虚拟机简介
Java stack 方法调用的参数传递 存储调用方法的返回值 存取表达式求值的中间结果 存储局部变量
Conventional Stack(C Stack) 支持本地方法调用 (JNI) JVM bytecode 指令翻译成机器指令 普通的 native 栈没多少区别 线程创建的时候创建
14
Java 虚拟机简介
Java 栈帧结构
local vars
operand stack
args+
Pointer to runtime constant pool
Fixed after compile
Java Stack
Frame
Frame
Frame
Frame
15
Java 虚拟机简介
Heap 所有的 class 的实例: object 都分配在此 所有线程共享的存储区域 堆的对象分配由指令控制,释放不受控制 ( 垃圾回收 ) VM 启动的时候创建,一个 VM 有一个 heap
Method Area 存储每个 class 的数据结构
constant pool, field,method data, code for method and constructor, special methods, class variable
VM 启动的时候创建,一个 VM 有一个 通常,这也是可以被 garbage collection 通常,在一些 VM 实现中,也可以放在堆里
16
Java 虚拟机简介 Heap and Method area
Heap
Method Area类定义数据- 常量池- field,method 数据- Method 的 bytecode 代码
实例 1 数据实例 2 数据实例 3 数据Garbage
Collector
类数据指针
17
Java 虚拟机简介
Class 文件结构ClassFile { U8 magic; U2 minor_version; U2 major_version; U2 const_pool_count; cp_info constant_pool[const_pool_count-1]; U2 access_flag; U2 this_class; U2 super_class; U2 interfaces_count; U2 interfaces[interfaces_count - 1]; U2 fields_count; field_info fields[fields_count-1]; U2 methods_count; method_info methods[fields_count-1]; U2 attributes_count; attribute_info attributes[attributes_count-1];}
18
Java 虚拟机简介 General infomation
19
Java 虚拟机简介
Constant pool
Consant Pool Count
Heterogeneous constants
Contant_long/Constant_double
Contant_int/Constant_float
Contant_Class
Contant_methodref
Contant_fieldref
Contant_InterfaceMethodRef
Contant_NameAndType
Contant_utf8
Contant_unicode
4bytes big-endian
8bytes big-endian
Utf8 string index
MethodAndType index
MethodAndType index
MethodAndType index
Variable length utf8 string
Variable length unicode string
Method index
Type index
20
Java 虚拟机简介
Field
21
Java 虚拟机简介
Method
22
Java 虚拟机简介
Attribute
23
Java 虚拟机简介
Java Byte Code Stack Based 201 opcodes Arithmetic Load and store Type conversion Object creation and manipulation Operand stack manipulation Control transfer Method invocation and return
24
问题: Java 也要编译,为什么说是解释型语言?
25
Dalvik 虚拟机
26
Dalvik 虚拟机
Android 上虚拟机 (Dalvik) : • run on a slow CPU • with relatively little RAM • on an OS without swap space • while powered by a battery
27
Dalvik 虚拟机
Android 虚拟机和标准虚拟机 基本理念是一样的 基本结构式一样的 Class 文件不一样 Bytecode 不一样
What is the Dalvik VM Type-safe, reference-safe Garbage Collection(mark-sweep) Run on Modern OS
智能机,多进程多任务 Big Class library
提供常用的 j2me 库 Bytecode-based
单位为 16-bit, 共 220 opcode Register based
28
Dalvik 虚拟机
Dalvik dex 文件结构
29
30
31
32
Dalvik 虚拟机
33
34
common system libraries (U) 21445320 — 100% (J) 10662048 — 50% (D) 10311972 — 48%
web browser app (U) 470312 — 100% (J) 232065 — 49% (D) 209248 — 44%
alarm clock app (U) 119200 — 100% (J) 61658 — 52% (D) 53020 — 44%
(U) uncompressed jar file (J) compressed jar file (D) uncompressed dex file
没有压缩的 dex比压缩的jar还要小!!!!!
Const pool 结构冗余太多
35
Dalvik byte code
36
public class Demo {public static void foo(){
int a = 1;int b = 2;int c = (a+b) *5;
}}
37
public static void foo(); Code: Stack=2, Locals=3, Args_size=0 0: iconst_1 1: istore_0 2: iconst_2 3: istore_1 4: iload_0 5: iload_1 6: iadd 7: iconst_5 8: imul 9: istore_2 10: return
38
1
Locals
1
iconst_1 istore_0
1
2
iconst_2
1
2
istore_1
1
2
1
iload_0
1
2
2
1
iload_1
1
2
3
iadd
1
2
5
3
iconst_5
1
2
10
imul
1
2
10
istore_2
39
Demo.foo:()V:regs: 0002; ins: 0000; outs: 0000 0000: code-address 0000: local-snapshot 0000: code-address 0000: code-address 0000: local-snapshot 0000: const/4 v0, #int 1 // #1 0001: const/4 v1, #int 2 // #2 0002: add-int/2addr v0, v1 0003: mul-int/lit8 v0, v0, #int 5 // #05 0005: code-address 0005: code-address 0005: local-snapshot 0005: return-void 0006: code-address
40
离线编译过程 C/C++ 等 native 代码,走完整的过程 Java走了一半 Javascript 一个没走
源码(c/java) Token 抽象语法树中间代码
(p-code, 三址码,RTL)
代码生成(asm)
目标机代码
41
Dalvik 源码结构 VM
虚拟机主框架 Oo
Operation on object Interp/mterp
虚拟机的解释器 Hprof
Profile 工具 Jdwp ( Java debug wire protocal ) Compiler
JIT 的 runtime 编译功能 Arch
JNI call bridge Native
Java core libraries 的底层支持,不是通过 jni 实现,直接虚拟机实现 Alloc
Heap 的操作
42
Thanks!
Recommended