移动系统中的 java 虚拟机

22
移移移 移移 Java 移移移 移移移

Upload: jera

Post on 11-Feb-2016

164 views

Category:

Documents


0 download

DESCRIPTION

移动系统中的 Java 虚拟机. 徐伟刚. Java 简介. Java 是一种面向对象的编程语言 一次编译,到处运行 全世界有超过 1000 万 Java 开发者. Java 发展简介 -Sun. 1995 年 Sun 公司发布 Java 语言 1996 年发布 JDK1.0 1999 年发布 J2SE 、 J2EE 、 J2ME 标准 2006 年 Sun 以 OpenJDK 开源 Java 2009 年 Oracle 收购 Sun. Java 发展简介 - 移动 Java. J2ME: Nokia 、 Jblend 、 Mirand Android. 矛盾. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 移动系统中的 Java 虚拟机

移动系统中的 Java 虚拟机徐伟刚

Page 2: 移动系统中的 Java 虚拟机

Java 是一种面向对象的编程语言一次编译,到处运行全世界有超过 1000 万 Java 开发者

Java 简介

Page 3: 移动系统中的 Java 虚拟机

1995 年 Sun 公司发布 Java 语言1996 年发布 JDK1.0

1999 年发布 J2SE 、 J2EE 、 J2ME 标准

2006 年 Sun 以 OpenJDK 开源 Java

2009 年 Oracle 收购 Sun

Java 发展简介 -Sun

Page 4: 移动系统中的 Java 虚拟机

J2ME: Nokia 、 Jblend 、 Mirand

Android

Java 发展简介 - 移动 Java

Page 5: 移动系统中的 Java 虚拟机

Java 虚拟机的性能追求移动系统的限制 CPU – 芯片厂商技术能力 内存 – 价格 功耗 – 无持久电源

矛盾

Page 6: 移动系统中的 Java 虚拟机

Java 虚拟机架构

compiler

binary convertor

binary optimizer

interpreter

JIT

stack

heap

thread

JNIDebugger &

profiler

binary loader

format engine mechanism

Java 虚拟机架构

Page 7: 移动系统中的 Java 虚拟机

Java 虚拟机 - 指令体系

Java 使用与平台指令无关的字节码虚拟机解释执行字节码

Page 8: 移动系统中的 Java 虚拟机

Java 虚拟机 - 指令模式栈式 寄存器式

操作数位置 方法调用栈帧 虚拟机寄存器解释器效率 指令数目多,低效 指令数目少,高效编译器实现难度

临时变量在栈上,易实现

需高效的寄存器分配算法进一步优化可能

与 CPU 指令相差较大,优化难度大

与 CPU 指令较为接近,在汇编解析器、芯片优化等方面均有可能进一步优化

Page 9: 移动系统中的 Java 虚拟机

Java 虚拟机 - 指令体系以 java 代码为例:

a = b + c

栈式指令:ILOAD cILOAD bIADDISTORE a

寄存器式指令 :l_add a, b, c

Page 10: 移动系统中的 Java 虚拟机

Java 虚拟机 - 解释器指令分发for(;;) {

ins = fetch_next_instruction();switch(ins) {case OP_001:

handle_OP_001;break;

case OP_002:handle_OP_002;break;

……}

}

switch-case version

Page 11: 移动系统中的 Java 虚拟机

Java 虚拟机 - 解释器指令分发handle_addresses[];……pre-calculate_handle_addresses();……for(;;) {

ins = fetch_next_instruction();goto handle_addresses[ins];

}

goto-address version

Page 12: 移动系统中的 Java 虚拟机

Java 虚拟机 - 解释器指令分发#define GOTO_OPCODE(_reg) add pc, rIBASE, _reg, lsl #6…….balign 64.L_OP_001: FETCH_ADVANCE_INST GET_INST_OPCODE(ip) GOTO_OPCODE(ip).balign 64.L_OP_002: GOTO_OPCODE(ip)……

align-goto version(Dalvik ARM)

Page 13: 移动系统中的 Java 虚拟机

Java 虚拟机 -JIT

hot spot

fetch instruction

interpret instruction

compiled

code cache

compile queue

instruction decode

flow graph

code generatorexecute code

cache

YN

YN

interpreter JIT compiler

SSA

Just in time compiler – 及时将热代码翻译成目标机器指令执行

Page 14: 移动系统中的 Java 虚拟机

Java 虚拟机 -JIT 优化点

消除指令分发使用物理寄存器基于目标指令优化基于动态信息优化

Page 15: 移动系统中的 Java 虚拟机

Java 虚拟机 -JIT 优化点示例a = b + c;e= a + d;

fectch_opload R1 <- bload R2 <- cR3 = R1 + R2store a <- R3goto_next_opfectch_opload R1 <- aload R2 <- dR3 = R1 + R2store e <- R3goto_next_op

load R1 <- bload R2 <- cR3 = R1+ R2load R4 <- dR5= R3 + R4store e <- R5

Page 16: 移动系统中的 Java 虚拟机

Java 虚拟机 - 对象访问

Java 对象 vs C 指针gc 影响resolve

Page 17: 移动系统中的 Java 虚拟机

Java 虚拟机 - 内存

gc 指标 - 吞吐量、碎片率没有最好,只有最合适

Page 18: 移动系统中的 Java 虚拟机

Java 虚拟机 - 内存 移动 vs 非移动移动式 非移动式

碎片 无 有

分配效率 高 低

gc 效率 低(大内存特别严重) 高

并行 gc 可行性 业界无方案 可行

Page 19: 移动系统中的 Java 虚拟机

Java 虚拟机 - 安装预优化

提前 resolve

函数 inline/JIT inline

Page 20: 移动系统中的 Java 虚拟机

Java 虚拟机 - 功耗

受目标芯片架构限制例如 ARM ? Thumb?

Page 21: 移动系统中的 Java 虚拟机

Java 虚拟机 - 发展

编译器优化动态特性字节码 native 化定制化内存管理

Page 22: 移动系统中的 Java 虚拟机

谢谢