java - 如果同时使用 JVM 和 Dalvik,Android 如何更快

标签 java android jvm

我知道 Android 使用它自己的名为 Dalvik 的虚拟机,它运行 .dex 文件而不是 .class 文件。

According to Wikipedia ,

Programs are commonly written in Java and compiled to bytecode for the Java virtual machine, which is then translated to Dalvik bytecode and stored in .dex (Dalvik EXecutable)

为什么Android需要先编译成JVM字节码(.class)再翻译成Dalvik字节码(.dex),为什么不能直接从.java编译成Dalvik字节码文件 ? ?

如果它使用两个 VM,首先是 JVM,然后是 Dalvik,那么它不会使编译过程变慢吗?

更新:

如果我在 Java 中运行一个程序,它将把 .java 文件编译成字节码 (.class) 然后解释它,如果我在 Android 中运行相同的程序,它会先把.java文件编译成.class,把.class编译成.dex,然后运行...相比之下,Android 会不会更慢?

最佳答案

Why Android needs to first compiled into bytecode for the JVM and then translates into Dalvik bytecode.? why can't it directly compiled to Dalvik byte code from .java file ?

如果您想为此编写一个完整的编译器,它可以。 new Jack compiler for Android显然是这样做的。

一般来说,编写字节码转换器比编写完整的编译器更容易。

then doesn't it make the compiling process slow ?

转换过程确实增加了开销。 “慢”是一种观点陈述,所以我不知道字节码转换是否使“编译过程变慢”对于你定义的“慢”。

关于java - 如果同时使用 JVM 和 Dalvik,Android 如何更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27724841/

相关文章:

java - 使用 Streams 查看一个列表是否包含另一个列表中的对象的属性

安卓小部件。强制停止后如何恢复进程?

java - 缩小的 APK 在运行时崩溃

java - 如果服务器突然宕机,Java代码会中途终止吗

java - 静态变量存储在java中的哪里?

java - 标识触发 DataIntegrityViolationException 的约束名称

java - 只有一个 Activity 的新 jframe

java - 如何在 hibernate/jpa 中保存一对多?

java - Android应用程序由于button.setOnClickListener(this)而关闭

java - JVM 堆使用变化。这个图正常吗?