美文网首页
Dalvik、JVM、ART

Dalvik、JVM、ART

作者: 卡路fly | 来源:发表于2020-05-30 01:50 被阅读0次

    Dalvik与JVM的不同

    • 执行文件不同,一个是dex,一个是class
    • 类加载系统与jvm区别较大
    • 可以同时存在多个DVM
    • Dalvik基于寄存器,JVM基于栈(寄存器是比内存更快的存储介质)

    ART比Dalvik优势

    • DVM使用JIT来将字节码转换成机器码,效率低
    • ART采用了AOT预编译技术,执行速度更快(安装时字节码转换成机器码)
    • ART会占用更多的应用安装时间和存储空间

    基于寄存器与基于栈的工作原理是什么,为什么会导致效率更高?

    https://blog.csdn.net/weixin_34315665/article/details/91385577

    1.1栈虚拟机

    操作数栈:任何对于内存的操作都要经过这个操作数栈,尽管这个操作数栈与变量同在内存里,依然需要先传递到操作数栈,然后再由操作数栈进行处理。

    当我们声明一个int a = 11; 的时候,虚拟机需要先将11从变量表,传递到操作数栈中,才能够进行使用。
    如果进行一个简单的加法,int a = 11;int b = 22;int c = a + b;
    基于栈的虚拟机上字节码指令如下所示:

    1.load a;
    2.load b
    3.add
    4.storge c
    

    字节码很短,但是行数很多。

    另外,每次将变量从变量表copy至操作数栈中,都要经过CPU总线进行传输(虽然都在内存里,但是内存之前的数据传递还是要走CPU总线)。也就是说,load a 一次,先把数据传至CPU,CPU再将数据放入,数据栈。

    1.load a -> cpu -> 数据栈 ,2次

    2.load b -> cpu -> 数据栈 ,2次

    3.add 从操作数栈中传递至CPU 2次 ,add 操作完放回操作数栈,3次

    4.storge c 操作数栈 -> CPU -> 数据表,2次。

    这个就是基于栈的虚拟机效率问题,一次加法操作,经过CPU次数9次。

    1.2寄存器虚拟机

    基于寄存器的虚拟机则没有操作数栈的概念,寄存器本身就是CPU的一部分用于存放指令,数据和地址,因此寄存器操作一次简单的加法,只要找到a,找到b,将a和b送入CPU中去进行计算,CPU将计算结果送回寄存器。

    只要3次,而且字节码只有一句

    1.add a, b, c
    

    基于寄存器与基于栈虚拟机的比较

    • 可移植性:栈 > 寄存器
      栈的操作都是通过操作数栈来完成,而不是直接操作CPU。JVM目标是跨平台,所以选择了这种比较中庸的办法。
    • 代码量 : 栈 < 寄存器
    • 执行效率: 栈 < 寄存器

    相关文章

      网友评论

          本文标题:Dalvik、JVM、ART

          本文链接:https://www.haomeiwen.com/subject/mygqzhtx.html