JVM系列学习随笔(一)

虚拟机

JVM:JVM全称Java Virtual Machine(Java虚拟机),是一个虚构出来的计算机,作用是把平台无关的.class里面的字节码翻译成平台相关的机器码,Dalvik、Art就是安卓中使用的虚拟机

一. 简述虚拟机区别

1.1 JVM虚拟机和Android虚拟机的区别

JVM虚拟机和Android虚拟机编译

1.2 Dalvik虚拟机和Art虚拟机的区别

Dalvik虚拟机和Art虚拟机

Art:典型的空间换时间,应用安装时翻译为字节码占用大量空间,cpu使用减少,耗电减少

总结

JVM执行的是.class文件。一个class文件代表一个类,多次加载,多次IO(class文件包含很多冗余信息)。jvm执行是基于虚拟栈的虚拟机

Android虚拟机执行的是.dex文件。一个dex包含所有系统类,一次加载,一次IO(dex工具去除冗余信息)。Android虚拟机是基于寄存器的虚拟机

(详见:三. 寄存器和栈的区别)


二. class及dex区别

2.1 文件结构

class文件和dex文件结构

总结

1. dex文件减少整体的文件大小,dex更像是一种压缩文件,一个dex可以表示更多的class;

class像是一种单个文件。

2. Android虚拟机加载类时,只对dex进行一次IO就可以加载很多类,而class需要被加载多次,进行多次IO,因此Android虚拟机的查找速度快

3. dex指令更加密集,class指令比较多(待理解)

4. dex寄存器设计方便寻址,class java栈需要多次load和store指令(待理解)

5. dex适合于移动设备,性能不太高的。class适合PC大内存,单指令小的可以快速执行


三. 寄存器和栈的区别

总结:

java虚拟机是基于栈的结构。基于栈的指令紧凑,指令仅占一个字节,称为字节码

Android虚拟机是基于寄存器的结构。基于寄存器的指令由于需要制定源地址和目标地址,因此需要占用更多的指令空间,Dalvik虚拟机的某些指令需要占用两个字节

基于栈和基于寄存器各有优劣,一般而言,执行同样的功能:

基于栈需要更多的指令(主要是load和store指令,意味着更多的指令分配次数和内存访问次数,访问内存是执行速度的一个重要瓶颈),意味着要多占用CPU时间

而基于寄存器需要更多的指令空间,意味着有数据缓冲,更容易失效


暂存于此,后续补充。。。

你可能感兴趣的:(JVM系列学习随笔(一))