美文网首页安卓开发学习Android技术知识安卓资源收集
05 Android---java虚拟机跟dalvik虚拟机的区

05 Android---java虚拟机跟dalvik虚拟机的区

作者: 小默森 | 来源:发表于2016-07-30 00:19 被阅读78次

    大家好,我是森森

    这节课我简单给大家介绍一下java虚拟机跟安卓系统虚拟机的区别.可能时间太晚了,有点不在状态,也有点紧张,大家见谅.


    05java虚拟机跟dalvik虚拟机的区别

    这篇文章重点写一写安卓运行时和Java运行时的区别.

    什么是运行时呢?其实我们所说的虚拟机就是运行时.

    两种虚拟机有什么不同呢?

    先说Java虚拟机,它的工作流程是这样的,首先编写一个Java代码,然后用Javac这个指令,把它编译成.class文件的字节码文件,我们想要运行这个字节码文件,必须要把它放到虚拟机里(

    JVM)去装载执行.

    安卓呢,它也有自己的虚拟机,叫dalvik virtual machine,我们平时都叫它dalvik虚拟机.

    dalvik虚拟机的编译过程要比JVM多了一个步骤,那就是Java的字节码文件还要经过进一步处理,经过dex compiler,也就是dex编译器,把它转成dalvik byte code,dalvik类型的字节码,然后再放到dalvik虚拟机里运行,那这个过程到底做了什么操作呢?

    大家也看了视频里的实验,就是同样的大小,整个文件要比多个文件的文件夹拷贝的要快.

    同样的道理,在Java虚拟机要执行代码的时候,它要把所有的class字节码文件给装载进虚拟机里,假设,你写的这个应用有一百个Java代码,就会生成一百个.class的字节码文件,它把这些字节码文件一个个装载进来,然后去找到字节码,再去解析运行,它比较慢,

    dalvik虚拟机,它所有的代码,只会生成一个dex文件,这个dex文件直接装载到dalvik虚拟机就可以解析执行了,运行效率会比较高.

    另外,dalvik虚拟机还会对字节码文件做很多优化操作,普通的Java虚拟机,每个class文件都有一个header,这个头包含着编译器的版本,运行的jvm版本等信息,每个class文件都一个头,就比较浪费存储空间,

    而dalvik虚拟机是把所有class文件的头都给抽取出来,只生成一个公共的头,另外,像一般我们写代码的时候会有一些静态变量,比如说,你定义了一个public static final int i=1;它事实上是一个全局的静态的成员变量,这个值是不会发生修改的,如果很多代码有这样的定义,

    dalvik虚拟机就把这样的一些常量给抽取出来,有字符串的常量池,类型定义的常量池,字段的常量池,方法的常量池,所以,dalvik虚拟机更适合移动平台,它的效率更高,运行速度也更快.

    另外呢,谷歌开发dalvik虚拟机还有一个原因,就是Java虚拟机版权问题,不是它自己的东西,用了得掏钱.视频中故事已经讲得很细,不再赘述.

    本人QQ号,525902456,如有错误,欢迎指出,希望能交到更多朋友,交流技术.

    免费赠送安卓教程

    相关文章

      网友评论

      • 没有梦想的小透明:视频在手机端放不了,不如给个别的地方的播放链接~
        没有梦想的小透明: @万能森森 这个可以~
        小默森:@Ecooohttp://v.youku.com/v_show/id_XMTY2MzU4NDc5Ng==.html
        看看这个地址能播吗?,如果感兴趣可以加我QQ,想办法发给你一些

      本文标题:05 Android---java虚拟机跟dalvik虚拟机的区

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