1 / 42

Android Virtual Machine

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

kamil
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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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自己扩展维护

  8. Java虚拟机简介

  9. Java虚拟机简介

  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 Garbage Collected Heap pc pc Java Stack Native Method Stack Java Stack Native Method Stack 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 栈帧结构 Pointer to runtime constant pool args+ local vars operand stack Fixed after compile

  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 类数据 指针 实例1数据 实例2数据 Garbage Collector 实例3数据 Method Area 类定义数据 - 常量池 - field,method 数据 - Method的bytecode代码

  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

  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. Dalvik虚拟机

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

  31. Dalvik byte code

  32. public class Demo { public static void foo(){ int a = 1; int b = 2; int c = (a+b) *5; } }

  33. 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

  34. 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

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

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

  37. Thanks!

More Related