Dalvik虚拟机

本文深入探讨了Dalvik虚拟机与标准JVM虚拟机的区别,阐述了Dalvik和Java运行环境之间的差异,并详细解释了Android平台上的class文件、dex文件以及apcap文件类型。

1 Dalvik虚拟机和标准Java jVM虚拟机的区别

 

Dalvik基于寄存器,而JVM基于栈。,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费
的时间更短。

 

2 Dalvik和Java运行环境的区别

 

  Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的
Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭.

 

3 相关文件类型

 

 a  class文件--Java编译后的目标文件

 

  不像J2se,java编译成class就可以直接运行,android平台上class文件不能直接在android上运行。由于Google
使用了自己的Dalvik来运行应用,所以这里的class也肯定不能在AndroidDalvik的java环境中运行,android
的class文件实际上只是编译过程中的中间目标文件,需要链接成dex文件后才能在dalvik上运行。

 

b dex文件--android 平台上可执行文件

 

   Android虚拟机Dalvik支持的字节码文件格式Google在新发布的Android平台上使用了自己的Dalvik虚拟机
来定义,这种虚拟机执行的并非Java字节码,而是另一种字节码:dex格式的字节码。在编译Java代码之后,
通过Android平台上的工具可以将Java字节码转换成Dex字节码。虽然Google称Dalvik是为了移动设备定
做的,但是业界很多人认为这是为了规避向sun申请Javalicense。这个DalvikVM针对手机程式/CPU做过最
佳化,可以同时执行许多VM而不会占用太多Resource。

 

c apk文件--android平台上安装文件

 

   Apk是Android安装包的扩展名,一个Android安装包包含了与某个Android应用程序相关的所有文件。apk
文件将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包。一个工
程只能打进一个.apk文件。

 

 

Dalvik虚拟机是Google为Android平台专门设计的一种虚拟机,用于运行Android应用程序。尽管Android应用程序使用Java语言进行开发,但它们并不运行在标准的Java虚拟机(JVM)上。相反,每个Android应用都在自己的Dalvik虚拟机实例中运行,这些实例是从Zygote进程的地址空间复制而来的,从而提高了应用启动的速度[^2]。 Dalvik虚拟机的设计考虑了移动设备上的资源限制和性能需求。与传统的Java虚拟机不同,Dalvik虚拟机基于寄存器架构,而不是堆栈架构。这种设计使得Dalvik能够更高效地利用CPU资源,并减少内存占用。此外,Dalvik支持即时编译(JIT)、垃圾收集(GC)、Java本地方法调用(JNI)以及Java远程调试协议(JDWP),确保了与Java生态系统的兼容性[^2]。 为了适应不同的硬件配置,Dalvik虚拟机提供了一系列内存管理参数,允许开发者根据设备的具体情况调整堆大小和其他相关设置。例如,在大内存设备上,可以通过调整`dalvik.vm.heapsize`等属性来优化内存使用[^4]。 ### Dalvik虚拟机的特点 - **基于寄存器的架构**:与传统JVM使用的堆栈架构相比,基于寄存器的架构可以生成更紧凑的字节码,有助于提高执行效率。 - **高效的内存管理**:通过合理的内存分配策略,如设置合适的最小和最大自由内存阈值,Dalvik能够在保证性能的同时有效管理内存[^4]。 - **快速的应用启动**:由于每个应用实例都是从Zygote进程复制而来,这减少了创建新进程所需的时间,加快了应用的启动速度。 - **支持多种高级特性**:包括即时编译、垃圾回收机制、JNI支持等,这些功能共同确保了Android应用的高性能和良好的用户体验[^2]。 ### 示例代码 下面是一个简单的示例,展示了如何查看当前Android设备上的Dalvik虚拟机版本信息: ```java public class DalvikVersionChecker { public static void main(String[] args) { String version = System.getProperty("java.vm.version"); System.out.println("Dalvik VM Version: " + version); } } ``` 这段代码通过调用`System.getProperty("java.vm.version")`获取并打印出当前Dalvik虚拟机的版本号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值