05 java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)

大家好,我是森森

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

点击打开本课视频

这篇文章重点写一写安卓运行时和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,如有错误,欢迎指出,希望能交到更多朋友,交流技术.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值