42
1 Android Virtual Machine

Android Virtual Machine

  • Upload
    kamil

  • View
    154

  • Download
    0

Embed Size (px)

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

Page 1: Android Virtual Machine

1

Android Virtual Machine

Page 2: Android Virtual Machine

2

Java 基本分类 Java 虚拟机简介 Dalvik 虚拟机简介

Page 3: Android Virtual Machine

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) 主要针对移动平台

Page 4: Android Virtual Machine

4

Java 基本分类 J2ME 体系结构

Profile (MIDP Application)

CLDC/CDC Libraries

KVM(K virtual Machine)

Operating System (Windows, Linux)

Page 5: Android Virtual Machine

5

Java 基本分类

MIDP MIDP (Mobile Device Information Profile) 现已成

为一种普遍的工业标准,基于 MIDP 开发的程序可以在任何设备上运行,它架构 CLDC 之上。

MIDP 中定义的 APIs 包括:javax.microedition.lcdui.*, javax.microedition.midlet.*, javax.microedition.rms

Page 6: Android Virtual Machine

6

Java 基本分类 CLDC 与 CDC

CLDC (Connected Limited Device Configuration), 它为所有低端消费电子产品的运行提供了最小的库集和 APIs 。

CDC (Connected Device Configuration), 它是 CLDC 的超集,它为高端消费电子产品提供运行环境。

J2EE J2SE CDC

CLDC

Page 7: Android Virtual Machine

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

… … …

Page 8: Android Virtual Machine

8

Java 虚拟机简介

Page 9: Android Virtual Machine

9

Java 虚拟机简介

Class Loader

RUNTIME DATA AREA

Method Area

HEAP

Java StackNative Method

Stack

Program Counter Register

Execute EngineNative

Interface

Native Libraies

Class Files

Page 10: Android Virtual Machine

10

Java 虚拟机简介

Class Loader 加载 class 文件到虚拟机

Execute Engine 也叫解释器 (interpreter), 解释 bytecode ,提交系

统执行 Native Interface

本地代码调用接口,解释器解释到此标记的 native 方法后,通此接口加载、调用本地方法。

Runtime Area 整个 JVM 的重点。

Page 11: Android Virtual Machine

11

Java 虚拟机简介

Runtime Data Area

Shared Thread 1 Thread 2

pc

JavaStack

NativeMethodStack

pc

JavaStack

NativeMethodStack

Garbage CollectedHeap

Method area

Page 12: Android Virtual Machine

12

Java 虚拟机简介

Program Counter Register 每个线程有一个 PC 寄存器 Size : 1 word (一个指针的大小) Value

native method (JNI) Undefined

non-native method : 当前执行的 bytecode 的地址。

Page 13: Android Virtual Machine

13

Java 虚拟机简介

Java stack 方法调用的参数传递 存储调用方法的返回值 存取表达式求值的中间结果 存储局部变量

Conventional Stack(C Stack) 支持本地方法调用 (JNI) JVM bytecode 指令翻译成机器指令 普通的 native 栈没多少区别 线程创建的时候创建

Page 14: Android Virtual Machine

14

Java 虚拟机简介

Java 栈帧结构

local vars

operand stack

args+

Pointer to runtime constant pool

Fixed after compile

Java Stack

Frame

Frame

Frame

Frame

Page 15: Android Virtual Machine

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 实现中,也可以放在堆里

Page 16: Android Virtual Machine

16

Java 虚拟机简介 Heap and Method area

Heap

Method Area类定义数据- 常量池- field,method 数据- Method 的 bytecode 代码

实例 1 数据实例 2 数据实例 3 数据Garbage

Collector

类数据指针

Page 17: Android Virtual Machine

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];}

Page 18: Android Virtual Machine

18

Java 虚拟机简介 General infomation

Page 19: Android Virtual Machine

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

Page 20: Android Virtual Machine

20

Java 虚拟机简介

Field

Page 21: Android Virtual Machine

21

Java 虚拟机简介

Method

Page 22: Android Virtual Machine

22

Java 虚拟机简介

Attribute

Page 23: Android Virtual Machine

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

Page 24: Android Virtual Machine

24

问题: Java 也要编译,为什么说是解释型语言?

Page 25: Android Virtual Machine

25

Dalvik 虚拟机

Page 26: Android Virtual Machine

26

Dalvik 虚拟机

Android 上虚拟机 (Dalvik) : • run on a slow CPU • with relatively little RAM • on an OS without swap space • while powered by a battery

Page 27: Android Virtual Machine

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

Page 28: Android Virtual Machine

28

Dalvik 虚拟机

Dalvik dex 文件结构

Page 29: Android Virtual Machine

29

Page 30: Android Virtual Machine

30

Page 31: Android Virtual Machine

31

Page 32: Android Virtual Machine

32

Dalvik 虚拟机

Page 33: Android Virtual Machine

33

Page 34: Android Virtual Machine

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 结构冗余太多

Page 35: Android Virtual Machine

35

Dalvik byte code

Page 36: Android Virtual Machine

36

public class Demo {public static void foo(){

int a = 1;int b = 2;int c = (a+b) *5;

}}

Page 37: Android Virtual Machine

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

Page 38: Android Virtual Machine

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

Page 39: Android Virtual Machine

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

Page 40: Android Virtual Machine

40

离线编译过程 C/C++ 等 native 代码,走完整的过程 Java走了一半 Javascript 一个没走

源码(c/java) Token 抽象语法树中间代码

(p-code, 三址码,RTL)

代码生成(asm)

目标机代码

Page 41: Android Virtual Machine

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 的操作

Page 42: Android Virtual Machine

42

Thanks!