Java 在 Android 环境下可以运行是因为 Android 提供了一个为移动设备优化的虚拟机——Dalvik虚拟机(在Android 4.4版本后,被Android运行时环境ART所取代),它使用专门为Android优化的字节码。这个虚拟机与 Java 的运行机制有所不同,但是基本原理类似。以下是详细的解释:
1. Java代码编译为字节码
在标准的Java环境中,Java代码首先会被Java编译器(javac)编译成Java字节码,这是一种平台无关的中间代码,存储于.class文件中。
2. 字节码转换为Dalvik字节码
对于Android应用开发,这些Java字节码文件会被转换为Dalvik可执行文件(.dex),这是一种专为Android设计的压缩格式,允许在内存有限的设备上有效运行。
3. 在Dalvik/ART虚拟机上运行
- Dalvik虚拟机: 最初的Android版本使用Dalvik虚拟机来执行.dex文件。Dalvik是一种基于寄存器的虚拟机,与Java虚拟机(JVM)基于栈的架构不同,这使得它更适合在资源受限的设备上运行。
- Android Runtime (ART): 从Android 4.4开始,Google引入了ART作为Dalvik的替代品。ART使用了预编译技术,它在应用安装时就将字节码转换成本地机器码,从而在运行时提高性能。这称为“ahead-of-time”(AOT)编译。
生活中的例子:
想象你在使用一个Android智能手机,并且打开了一个如WhatsApp的聊天应用。WhatsApp的开发者使用Java编写了应用的大部分功能。当他们完成编码后,他们使用Android SDK工具将Java代码编译成.class文件,然后进一步转换成.dex格式。
当你在手机上点击WhatsApp图标时,Android操作系统会通过其虚拟机(Dalvik或ART,取决于Android版本)来执行这个应用程序。如果你的手机是较新的Android版本,ART会在安装WhatsApp时就将.dex文件预编译成机器码。当你使用WhatsApp时,你实际上是在运行经过编译的机器码,这使得应用能够快速、高效地在你的设备上运行。
作者:http://xkrj5.com 纯原创首发,转载保留版权!
标签:Java,字节,Dalvik,虚拟机,ART,java,Android,安卓,运行 From: https://www.cnblogs.com/xkrj5/p/17819498.html