Android virtual machine
This presentation is the property of its rightful owner.
Sponsored Links
1 / 42

Android Virtual Machine PowerPoint PPT Presentation


  • 151 Views
  • Uploaded on
  • Presentation posted in: General

Android Virtual Machine. Java 基本分类 Java 虚拟机简介 Dalvik 虚拟机简介. Java 基本分类. J2ME/J2EE/J2SE 的比较 J2SE TM (The Java TM 2 Platform, Standard Edition) 标准 java 程序库,主要面向桌面开发的,提供 GUI 支持, applet 等通常的 java 应用 .

Download Presentation

Android Virtual Machine

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Android virtual machine

Android Virtual Machine


Android virtual machine

  • Java 基本分类

  • Java 虚拟机简介

  • Dalvik虚拟机简介


Android virtual machine

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


Android virtual machine

Java 基本分类

  • J2ME体系结构

Profile (MIDP Application)

CLDC/CDC Libraries

KVM(K virtual Machine)

Operating System

(Windows, Linux)


Android virtual machine

Java 基本分类

  • MIDP

    • MIDP (Mobile Device Information Profile)现已成为一种普遍的工业标准,基于MIDP开发的程序可以在任何设备上运行,它架构CLDC之上。

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


Android virtual machine

Java 基本分类

  • CLDC与CDC

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

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

J2EE

J2SE

CDC

CLDC


Android virtual machine

Java 基本分类

  • Android Java的地位

    • Android不是java

      • Android没有java授权(无java logo)

      • Android虚拟机不标准

      • Android binary不兼容java

      • Android core libraries自己扩展维护


Android virtual machine

  • Java虚拟机简介


Android virtual machine

Java虚拟机简介


Android virtual machine

Java虚拟机简介

  • Class Loader

    • 加载class文件到虚拟机

  • Execute Engine

    • 也叫解释器(interpreter),解释bytecode,提交系统执行

  • Native Interface

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

  • Runtime Area

    • 整个JVM的重点。


Android virtual machine

Java虚拟机简介

  • Runtime Data Area

Shared

Thread 1

Thread 2

Garbage Collected

Heap

pc

pc

Java

Stack

Native

Method

Stack

Java

Stack

Native

Method

Stack

Method area


Android virtual machine

Java虚拟机简介

  • Program Counter Register

    • 每个线程有一个PC寄存器

    • Size:1 word(一个指针的大小)

    • Value

      • native method (JNI)

        • Undefined

      • non-native method :

        • 当前执行的bytecode的地址。


Android virtual machine

Java虚拟机简介

  • Java stack

    • 方法调用的参数传递

    • 存储调用方法的返回值

    • 存取表达式求值的中间结果

    • 存储局部变量

  • Conventional Stack(C Stack)

    • 支持本地方法调用(JNI)

    • JVM bytecode指令翻译成机器指令

    • 普通的native栈没多少区别

    • 线程创建的时候创建


Android virtual machine

Java虚拟机简介

  • Java 栈帧结构

Pointer to runtime constant pool

args+

local vars

operand stack

Fixed after compile


Android virtual machine

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


Android virtual machine

Java虚拟机简介

  • Heap and Method area

Heap

类数据

指针

实例1数据

实例2数据

Garbage

Collector

实例3数据

Method Area

类定义数据

- 常量池

- field,method 数据

- Method的bytecode代码


Android virtual machine

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

}


Android virtual machine

Java虚拟机简介

  • General infomation


Android virtual machine

Java虚拟机简介

  • Constant pool


Android virtual machine

Java虚拟机简介

  • Field


Android virtual machine

Java虚拟机简介

  • Method


Android virtual machine

Java虚拟机简介

  • Attribute


Android virtual machine

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


Android virtual machine

  • 问题:

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


Android virtual machine

  • Dalvik虚拟机


Dalvik

Dalvik虚拟机

  • Android上虚拟机(Dalvik):

    • • run on a slow CPU

    • • with relatively little RAM

    • • on an OS without swap space

    • • while powered by a battery


Dalvik1

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


Dalvik2

Dalvik虚拟机

  • Dalvik dex文件结构


Dalvik3

Dalvik虚拟机


Android virtual machine

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


Android virtual machine

  • Dalvik byte code


Android virtual machine

public class Demo {

public static void foo(){

int a = 1;

int b = 2;

int c = (a+b) *5;

}

}


Android virtual machine

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


Android virtual machine

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


Android virtual machine

  • 离线编译过程

    • C/C++等native代码,走完整的过程

    • Java走了一半

    • Javascript一个没走


Android virtual machine

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


Android virtual machine

  • Thanks!


  • Login