Adriod—— DVM
虽
然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java
VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode
),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,Java把类编译成一个或多个.class byte code
文件,然后打包到jar中,JVM会从中jar文件中获得相应的.class文件和JRE字节码。 Android
VM虽然也是是用Java语言进行编程, Java程序通过编译后,还需要通过SDK中的dex工具转化成.dex格式,DVM再从其中读取指令和数据。
每一个应用程序即一个进程(Linux的一个
Process)。二者最大的区别在于Java
VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可
以根据硬件实现更大的优化,这更适合移动设备的特点。
DVM非常适合在移动终端上使用,与PC相比,它不需要很快的CPU和大量的内存空间. Google的测算显示,64MB的内存已经能让系统正常运转了。其中24MB被用于底层系统的初始化和启动。另外20MB被用于启动高层服务。DVM有如下特征:
•使用专有的.dex格式。
•原因是java类文件在编译过后,会产生至少一个.class文件包含大量陈余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中。即减少了整体文件的尺寸和IO操作,也提高了类的查找速度。
•增加了对新的操作码的支持
•文件结构尽量简洁,使用等长的指令,借以提高解析速度。
•尽量扩大只读结构的大小,借以提高跨进程的数据共享。
•dex的优化,dex文件的结构是紧凑的,但是如果想提高运行时的性能,就需要对dex文件进行进一步的优化,这些优化针对以下几个方面:
•验证dex文件中的所有类
•对一些特定的类和方法里面的操作码进行优化
•调整所有的字节序(Little_endian)和对齐结构中的每一个域
•基于寄存器,基于寄存器的虚拟机虽然比基于堆栈的虚拟机在硬件,通用性上要差一些,但是它的代码执行效率去更好
•
每一个Android应用都运行在它自己的DVM实例中,每一个DVM实例都是一个独立的进程空间。所有的Android应用的线程都对应一个Linux
线程,DVM因此可以更多地依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,不同的应用都是用不同的Linux用户来运行以最大程
度地保户应用程序的安全性和独立性
http://blog.csdn.net/virus026/archive/2010/12/19/6085779.aspx
Adriod—— DVM的更多相关文章
- TaintDroid剖析之DVM变量级污点跟踪(下篇)
TaintDroid剖析之DVM变量级污点跟踪(下篇)作者:简行.走位@阿里聚安全 1 回顾 在上一章节中我们详细分析了TaintDroid对DVM方法参数和方法变量的变量级污点跟踪机制,现在我们 ...
- Andriod——区别DVM与JVM
区别DVM与JVM 1.首要差别 Dalvik: 基于寄存器,编译和运行都会更快些 JVM: 基于栈, 编译和运行都会慢些 2.字节码的区别 Dalvik: 执行.dex格式的字节码,是对.class ...
- class 文件与dex文件区别 (dvm与jvm区别)及Android DVM介绍
区别一:dvm执行的是.dex格式文件 jvm执行的是.class文件 android程序编译完之后生产.class文件,然后,dex工具会把.class文件处理成.dex文件,然后把资源文件和 ...
- android 58 jvm和dvm的区别(Dalvil VM)
java程序在jvm和dvm的执行过程: #jvm和dvm的区别(Dalvil VM) 谷歌刚开发的安卓系统用的就是JVM,JVM版权属于sun公司也就是Oracle公司,后来用的是DVM,由于版权问 ...
- 2016.08.13/2/index/_d_Lucene54_0.dvm: Too many open files
er[file_system_exception: /elk/elasticsearch/data/es_cluster/nodes/0/indices/logstash-zjzc-frontend- ...
- Android DVM
1.DVM(Dalvik Virtual Machine)概述 是Google公司自己设计用于Android平台的Java虚拟机 支持已经转化为.dex(及Dalvik Excutable)格式的Ja ...
- java jvm和android DVM区别
本文转自:http://blog.csdn.net/yujun411522/article/details/45932247 1.Android dvm的进程和Linux的进程, 应用程序的进 ...
- Dalvik VM (DVM) 与Java VM (JVM) 的区别?
Dalvik虚拟机存在于Android系统,JVM是java虚拟机,两者都是虚拟机,本文就对两者进行比较,讲述它们的不同. Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的 ...
- android DVM
android 运行环境主要是虚拟机技术:Dalvik.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说 ...
随机推荐
- 操作系统基础知识之————单线程(Thread)与多线程的区别
单线程(Thread)与多线程的区别 (一)首先了解一下cpu: 随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐 ...
- [转载] Docker网络原则入门:EXPOSE,-p,-P,-link
原文: http://dockone.io/article/455 如果你已经构建了一些多容器的应用程序,那么肯定需要定义一些网络规则来设置容器间的通信.有多种方式可以实现:可以通过--expose参 ...
- HDU5845 Best Division
递归写法,好久不写很容易就gg了... dp[i]=max(dp[j])+1,并且s[i]XORs[j]<=x 01字典树优化一下转移. #include <bits/stdc++.h& ...
- java SE (java Standard Edition)
14.10.22 学习java SE的Object: -------------------------------------15.11.18----
- Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc) (转载)
[转](转)Linux内核访问外设I/O资源的方式-静态映射(map_desc)方式 Linux内核访问外设I/O资源的方式 Author: Dongas Date: 08-08-02 我们知道默认外 ...
- poj3714Raid(平面最近点对)
链接 模板 稍加一点标记 模板 #include <iostream> #include<cstdio> #include<cstring> #include< ...
- Java的加密与解密
package com.wangbo.util; import java.security.Key; import java.security.Security; import javax.crypt ...
- JavaWeb学习总结(四)—ServletConfig和ServletContext
一.ServletConfig 1. ServletConfig介绍: ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletCo ...
- Windows的命令行查看,修改,删除,添加环境变量
查看当前所有可用的环境变量:输入 set 即可查看. 显示某环境变量: 例如:echo %SystemDrive% 类似linux下面的echo $PATH这种用法. 首先明确一点:所有的在cmd命令 ...
- POJ 3181 Dollar Dayz && Uva 147 Dollars(完全背包)
首先是 Uva 147:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p ...