Dalvik 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Dalvik 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 未知
开发语言 Java
操作系统 Android
软件类型 开源软件
开发厂商
地区 不详
提 交 者 红薯
适用人群 未知
收录时间 2009-06-12

软件简介

Dalvik虚拟机是Google的用于移动设备的Android平台的一个主要部分。虚拟机可运行Java平台应用程序,这些应用程序被转换成紧凑的Dalvik可执行格式(.dex),该格式适合内存和处理器速度受限的系统。

Dalvik虚拟机的作者是丹伯恩斯坦(Dan Bornstein)。

与 大多数虚拟机和真正的Java虚拟机不同,前者是栈机(stack machine),而Dalvik VM是基于寄存器的架构。就像CISC与RISC的争论,这两种方式的相对优点是一个不断争论的话题,且有时技术界限会变得模糊不清。此外,两种方法的相 对优势取决于所选择的解释/编译策略。但是,总的来说,基于stack的机器必须使用指令来载入stack上的数据,或使用指令来操纵数据,因此与基于寄 存器的机器相比,需要的指令更多。然而,在寄存器的指令必须编码源和目的地寄存器,因此往往指令更大。

一个名为dx的工具,它用于转换 Java的.class文件到.dex格式。多个类文件可包含到单个的.dex文件中。重复的、可用于多个类的字符串和其它常量在转换到.dex格式时输 出到保留空间。Java字节码还可转换成可选择的、Delvik VM使用的指令集。一个未压缩的.dex文件在文件大小方面往往比从同样的.class文件压缩成的.jar文件更小。

当Dalvik可执行文件安装到移动设备时,它们是可以被修改的。为了进一步的优化,在某些数据、简单数据结构和内联的函数库中的字节顺序可以互换,例如空类对象被短路。

为满足低内存要求而不断优化, Dalvik虚拟机有一些独特的、有别于其它标准虚拟机的特征:

(1)虚拟机很小,使用的空间也小;
(2)Dalvik没有JIT编译器;
(3)常量池已被修改为只使用32位的索引,以简化解释器;
(4)它使用自己的字节码,而非Java字节码。

此外, Dalvik被设计来满足可高效运行多种虚拟机实例。

Dalvik虚拟机在Android架构中的位置

展开阅读全文

评论 (2)

加载中
@红薯 该项目首页 http://www.dalvikvm.com/ 改行了 #Dalvik#
2016/05/27 09:44
回复
举报
你这是挖坟
06/11 14:19
回复
举报
更多评论
发表了资讯
2013/11/08 00:00

Google 将用 ART 运行时替代 Dalvik

Android操作系统已经成熟,Google的Android团队开始将注意力转向一些底层组件,其中之一是负责应用程序运行的Dalvik运行时。Google开发者已经花了两年时间开发更快执行效率更高更省电的替代ART运行时。 ART代表Android Runtime,其处理应用程序执行的方式完全不同于Dalvik,Dalvik是依靠一个Just-In-Time (JIT)编译器去解...

63
39
发表了资讯
2010/08/15 00:00

甲骨文与Google专利侵犯案要追溯到Sun时期的纠纷

GNOME和Mono项目发起人Miguel De Icaza在博客上分析了甲骨文起诉Google侵犯Java专利的前因后果,而Java之父James Gosling也证实,在Sun和甲骨文举行合并商讨会议期间曾讨论了Sun和Google之间的专利状况,当时甲骨文的律师听后“眼睛闪闪发亮”。 De Icaza指出,Sun创造了Java,但却很难直接从Java上获利,它主要的收入来...

3
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2015/09/07 13:36

Dalvik与JVM

Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个...

0
1
发表了博客
2013/01/28 13:16

Dalvik虚拟机

很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;同时还要两个明显的不同: Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable)。 在Java ...

0
0
发表了博客
2013/08/26 10:54

Dalvik :breakpoint

这是一个选择性的功能,简单的说,就是一个程序崩溃后,你记住它崩溃时的PC值。 下一次再编译的时候遇到它,编译器会进一步展开这些信息,方便你去调试。 file:vm/compiler.cpp func:static bool compilerThreadStartup(void) /* Enable signature breakpoints by customizing the following code */ #if defined(SIGN...

0
0
发表了博客
2013/08/30 18:09

dalvik:java2class2dex2jar

ryanel@ryaneVM:~/SDK/my-java-test$ echo 'class Foo {''public static void main(String[] args) {''System.out.println("Hello, world");}}' > Foo.java ryanel@ryaneVM:~/SDK/my-java-test$ javac Foo.java -verbose [parsing started Foo.java] [parsing completed 16ms] [search path for source files: .] [searc...

1
0
发表了博客
2019/01/03 18:51

Dalvik和ART

--摘自《Android进阶解密》 DVM和ART都是在Zygote进程中诞生的 *DVM和JVM的区别* 1.基于的架构不同    DVM是基于寄存器的,它没有基于栈的虚拟机在复制数据时而使用的大量的出入栈指令,同时指令更紧凑、更简洁。但是由于显式指定了操作数,所以基于寄存器的指令会比基于栈的指令要大,但是由于指令数量的减少,总的代...

0
0
发表了博客
2013/09/02 15:08

Dalvik :dvmCompilerMIR2LIR

这个函数的主要工作是: 1)将MIR转化为LIR 注意,LIR还不是机器码(MC:machine code),机器码也不完全等于汇编,因为汇编里面还包含了汇编伪指令。 2)优化 例如用java写的循环,如果是很明显可以展开的循环,可以在多核环境下被加速。 如果在上层(LIR)就优化,要比在MC要快(?) 我各位认为是高级语言更加容易被分...

2
0
发表了博客
2014/12/19 18:20

dalvik smali 语法

dalvik smali 语法

1
1
发表了博客
2013/09/02 15:16

Dalvik:dvmCompilerAssembleLIR

这是在frontend.cpp(vm\compiler)里面的情况: /* Convert LIR into machine code. Loop for recoverable retries */ do { dvmCompilerAssembleLIR(&cUnit, info); cUnit.assemblerRetries++; if (cUnit.printMe && cUnit.assemblerStatus != kSuccess) ALOGD("Assembler...

0
1
发表了博客
2014/06/24 00:22

Dalvik指令集

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

0
5
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2016/11/03 11:41

在JVM里面运行Android字节码文件(.class)是否可行?

Android应用也是基于Java的,只是用到了一些额外的安卓的库,不同的是,dalvik虚拟机在执行安卓程序是会先将.class 文件转换为.dex文件。那么是否有办法在JVM里面通过Class Loader 动态加载一个Android .class 文件,并解释执行呢?

3
0
发表了问答
2015/05/18 23:00

Dalvik 支持java的全部方法吗?java虚拟机第三方也可以制作,那么java相当于开源的?

2
0
发表了问答
2011/09/05 12:07

百度Android开发面试题

1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指Dalvik的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。 2、sim卡的EF 文件有何作用 sim卡的文件系统有自己规范,主要是为了和...

16
107
发表了问答
2011/09/07 09:44

Dalvik 内存调整及监控报告

原文转自:http://marshal.easymorse.com/archives/3942 目前开发android应用,主要问题在内存的使用上,需要熟悉andorid虚拟机Dalvik的内存特性。以下是Nexusone Android 2.2(非官方的CM衍生版)做的实验。 使用系统自带的高级配置功能,不确定官方版本是否有这个选项,似乎是没有。 安装系统后默认的是32M,网上有人说...

1
1
发表了问答
2013/03/09 13:21

在安卓机里的应用程序都会分配一个独立的虚拟机,然后这样的话沙盒技术在安卓机上怎么样啊

就是想在安卓平台上运用沙盒技术来做类似于入侵检测和安全桌面那样子的东西 这个可以做么 可行性怎么样啊 我准备做一个东西去参加信息安全的竞赛 希望大神们给点意见

2
0
发表了问答
2011/09/27 17:12

Android程序是以独立的用户身份运行的吗?

正在阅读《Andoird - 移动开发一本就够》,作者在介绍Android系统的时候,画了一张Android体系结构的图表:每个Android App运行的时候都会创建一个Dalvik虚拟机实例,每一个Dalvik虚拟机实例都是用一个独立的Linux用户账户运行的。 我无法理解的是,为什么要用不同的用户来运行不同的Dalvik虚拟机呢?...

4
0
发表了问答
2009/09/27 15:23

Android的虚拟机Dalvik引来论战不断

随着上周Google的Android SDK的发布,关于它的API以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举。不过,其中的一个话题在Java社区是一石激起千层浪,这就是Android平台的基础——Dalvik虚拟机。 Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。一直以来都有人在猜测...

3
2
发表了问答
2012/05/22 10:50

Dalvik包不在api中是什么问题,需要重新下载吗 哪里有这个包

The import dalvik.annotation.EnclosingMethod cannot be resolved

1
0
发表了问答
2011/02/22 22:07

Conversion to Dalvik format failed: Unable to exec

Description Resource Path Location Type Conversion to Dalvik format failed: Unable to execute dex: wrapper was not properly loaded first Activity02 Unknown Android Packaging Problem 不知道为什么会有这个错误 以前写的正确的代码也不能再运行了 ,求助...

1
1
发表了问答
2011/09/25 20:38

Dalvik——基本Dalvik VM调用

在android设备上,dalvik vm通常都被嵌入到android应用框架里执行,也可以直接运行vm,就像你要在你桌面系统运行虚拟机一样。 在编译完java源码后,转换并整合.class文件到.dex文件然后将它push到设备。这儿是个简单的例子: % echo 'class Foo {'\ > 'public static void main(String[] args) {'\ > 'System.out.printl...

1
2
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
2 评论
59 收藏
分享
返回顶部
顶部