首页 > 编程语言 >java为什么能在安卓环境下运行,如何运行的,原理是什么,详细!

java为什么能在安卓环境下运行,如何运行的,原理是什么,详细!

时间:2023-11-09 13:24:59浏览次数:28  
标签:Java 字节 Dalvik 虚拟机 ART java Android 安卓 运行

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

相关文章

  • 现在的安卓12或者是安卓13用的是什么虚拟机ART还是Dalvik?举个比喻
    Android5.0(Lollipop)及以后的版本使用的是ART(AndroidRuntime)虚拟机,而不是早期版本中使用的Dalvik虚拟机。从Android4.4(KitKat)开始,ART就作为一个实验性的特性出现,并在随后的版本中取代了Dalvik。 要用一个生活中的例子来比喻的话,我们可以把虚拟机想象成一家咖啡店的咖啡机。......
  • ART还是Dalvik虚拟的原理是什么,跟安卓运行APK有啥关系
    ART(AndroidRuntime)和Dalvik都是Android操作系统中的应用程序运行环境。它们都是虚拟机,用于在Android设备上执行应用程序代码。APK(AndroidPackage)是Android应用程序的打包格式,包含了应用程序的所有文件,包括应用程序代码、资源和元数据。Dalvik虚拟机:原理:Dalvik是一种基于寄存......
  • JAVA怎么画三角形,用一个简单通俗的例子
    在Java中,画三角形通常意味着在图形用户界面(GUI)上绘制一个三角形的图形,或者在控制台(命令行界面)上打印出三角形的形状。我会提供两种情况的简单示例: ###控制台三角形 如果我们要在控制台中打印一个三角形,我们可以使用循环来打印一系列的星号(`*`)字符。下面是一个简单的例子: ......
  • Dalvik/ART虚拟机是什么,跟安卓运行APK有啥关系,举个常用例子
    Dalvik和ART(AndroidRuntime)都是安卓操作系统中的应用程序虚拟机,它们是Android设备上运行APK文件的关键组成部分。Dalvik虚拟机概念:Dalvik是Android最初使用的虚拟机,它专为Android系统设计,主要用于执行APK中的DalvikExecutable(.dex)文件。工作原理:Dalvik通过使用即时编译(JIT)将......
  • 为什么java被称作是平台无关的编程语言,举个详细的例子
     Java被称为平台无关的编程语言主要是因为它的设计哲学:“编写一次,到处运行”(WriteOnce,RunAnywhere-WORA)。这种特性是由Java的运行时环境(JavaRuntimeEnvironment,JRE)和Java虚拟机(JavaVirtualMachine,JVM)实现的。我将详细解释这一概念,并提供一个具体的例子来说明......
  • The Javascript alert, confirm, and prompt boxes
    Thealert,confirm,andpromptboxesThethree"commands"involvedincreatingalert,confirm,andpromptboxesare:window.alert()window.confirm()window.prompt()Letslookatthemindetail.Thefirstoneis:window.alert()Thiscommandpopsu......
  • Java异常的分类
       异常处理     ......
  • docker 已经运行的容器重命名
    你可以使用以下步骤来重命名已经运行的Docker容器:首先,通过dockerps命令查看正在运行的容器的列表,找到你想要重命名的容器的CONTAINERID或者名称。停止该容器:dockerstop<CONTAINERID或者名称>重命名容器:dockerrename<旧容器名称><新容器名称>例如:doc......
  • Java数据类型和MySql数据类型对应表
    javamysql数据类型对照类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述      VARCHARL+NVARCHARjava.lang.String12 CHARNCHARjava.lang.String1 BLOBL+NBLOBjava.lang.byte[]-4 TEXT65535VARCHARjava.lang.String-1       INTEGER4IN......
  • 《java解惑》——续类谜题
    1.Java中的隐藏(hide):问题:下面的小程序用来演示java中的隐藏,代码如下:classBase{publicStringclassName="Base";}classDerivedextendsBase{privateStringclassName="Derived";}publicclassTest{publicstaticvoidmain......