🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### Dalvik是啥呢? 从未知道冰岛有Dalvik这么一个重要的村庄,直到Dan Bornstein将自己为Android系统编写的进程虚拟机命名为Dalvik后才被我所知。 它是Android系统独有的,主要作用就是使得已转换为 .dex(即Dalvik Executable)格式的Java应用程序在Android系统上运行。 它是Java运行在Android系统的基础。那么问题就来了,有标准的Java虚拟机JVM,为啥还要新造一个Dalvik呢? 答案很简洁,就是为了更加适合资源十分有限的嵌入式系统。 也许Google进行了很多努力使得Dalvik比JVM在Android上更高效,但是业界最终还是不满意,认为Dalvik拖慢了Android的速度。 在Android4.4中Google进行了另外的尝试,那就是ART(Android Runtime)的技术预览。我当然也进行了切换(在设置--开发者选项---选择运行环境), 结果是原来的应用会重新编译(代码预读取编译),变得很大,速度有多大的提升,我用肉眼去看还没有太大差别,但官方公布的数据说提升还是很大的。 不过有些应用还不支持ART。在Android5.0中Google挥起大刀,终于将Dalvik砍掉,用ART完全将其替换掉。 #### Dalvik的口水战 一年以前,我的闲暇时光是在玩微博中度过的。 有一天中午和齐天、周权午饭回来翻翻微博,看到“CSDN移动”发了这样一条消息: 【Java通向ObjC语言的桥梁:谷歌J2ObjC 0.7新版亮相】Google近日发布了开源命令行工具J2ObjC的最新版本:J2ObjC 0.7。J2ObjC完全开源,通过它,开发iOS应用只需用Objective-C编写UI部分代码,其余功能均可用Java语言编写实现。 我对这种转换是不太感冒的,扫了一眼评论,一个id叫办公软件的评论我觉得有待商榷,他是这样说的: “Android不是Java,无非是用了Java语法罢了,运行层面上和Java基本无关。” 我觉得哪里有些别扭,也许他说的运行层面上和Java基本无关指的的Linux Kernel?但我理解的运行层面是包含了应用的运行以及FWK,那么跟Java就逃不了关系了。我就回了一句: “不是单单用了Java语法吧?上层应用是Java Applications,从下向上数第二层的Android Runtime中的Dalvik 虚拟机,都是Java的存在。请看Android系统架构。另外,看看为什么google要提供NDK。” 没想到我就是简单的描述一下我的理解,却造来了“办公软件”的指责: “harmony的类库, 照你这么说,我当年用J#包装了一堆Java API, 也算是Java? 请不要这么不专业.” 我抱着心平气和讨论的态度,顺着他说: “兄弟,其实我们俩可以心平气和的讨论一些问题。J#是微软用Java的语法来吸引原Java开发者,这个确实如你所说,只是Java的语法,但是J#使用的.Net运行时,仍是一种虚拟机。” 对方的傲慢简直令人做呕: “很遗憾,对于一些连名词都搞喜欢混淆的同学,我的面试时间只给3分钟” 我一直压着火,继续回着: “请问,我哪个名词搞混淆?你说话之前不看人家的上下文么?还是没理解别人说的重点在哪里?你这样的面试官,偶一般只给一分钟。还摆上老资格了,谁没当过呀。。。呵呵” “也许没猜错的话,你一直在认为我说的是“JVM = Dalvik VM”,但是我主要表达的是,Dalvik VM 是一种Java 虚拟机。无论怎样,我这样表达应该是成立的。欢迎图草。” 结果话题有转到了JVM与Dalvik上面了,对方也回了三条: “Dalvik VM压根就不符合JVM规范,你却说这是Java虚拟机? 照你这么说,J#跑在CLR上,CLR也是Java虚拟机?” “你主要表达的是,"Dalvik VM 是一种Java 虚拟机",奇葩啊奇葩, 哪门子来的Java虚拟机哟,” “JRockit是一种Java虚拟机, J9 是一种Java虚拟机,ZingVM是一种Java虚拟机,Hotspot是一种Java虚拟机, 为啥这么定义? 因为他们follow了Java虚拟机的规范. Dalvik VM是Java虚拟机吗? 估计只有你和你看的那边书的作者才这么认为” 后来的争论就在“Dalvik是不是一种Java虚拟机”这个命题上了。让我想到了白马非马论,“求马,黄黑马皆可致,求白马,黄黑马不可致”。 但他的一些说法还是值得肯定的,比如: “Harmony的虚拟机,就是个完全符合JVM标准的虚拟机. Android用了Harmony的类库,但是Android 的VM,和JVM标准完全不搭界.” 齐天也看到了这场争吵,对我说,对方是个上了邪路的人,与他争论有和意义? 参考: 1.wikipedia中对Dalvik的描述: Dalvik is the process virtual machine (VM) in Google's Android operating system, which, specifically, executes applications written for Android.