JVM 与 Dalvik and/or ART 究竟有何不同?

How exactly does JVM differ from Dalvik and/or ART?

首先,我想这个问题的标题可能不好,但我想不出合适的词,所以请随时提出修改建议,我会进行修改,这样问题就更有教育意义了并与他人相关。

我知道 javax.Swing 根本不能用于 Android 项目,我接受了这一点并学习了 Android XML 基于 UI设计,但出于好奇,我想确切地知道为什么

我意识到 phone 的屏幕尺寸可能是 Swing 不能很好处理的东西,但是阻止开发人员简单地导入 javax.Swing 包(除了 Android Studio 一开始就不允许它发生),但是变形和丑陋的 Swing windows 可能会出现在 Android 设备屏幕上?我也意识到 AWT 和 SWT 也必须导入,但同样的问题也适用于这些包。

我认为我对此缺乏理解可能真正源于对 Java 虚拟机和 Android 等价物(Dalvik 是否仍在使用,或者它们是否已切换 cold-turkey 到 ART?)。

一如既往,非常感谢您提供有关该主题的任何信息或读物。我真的很想了解更多有关 JVM、Dalvik 和 ART 工作原理的基础知识。

这篇文章可能对您有所帮助 http://www.techentice.com/dalvik-vs-art-android-drop-dalvik-efficient-art/ 尽管它已经有些过时了。它确实解释了 JVM 与 DALVIK 和 ART 之间的差异。

至少存在三个根本区别:

  • API 不同;例如,即使是 Android 的 SDK 的最新版本也没有 JSR 203;
  • 二进制格式不同; Dalvik/ART 不生成 JVM 字节码;
  • 语言水平不同;这部分是前一点的结果,因为为了支持给定的语言级别,Dalvik/ART 必须重新实现所有 parsing/bytecode 产品以适应其自己的 VM。

后一点的意思是Java5年[=26]出现的try-with-resourcesAndroid仍然没有主流支持=] 之前;随着时间的推移,各种努力已经看到了支持这个加上 Java 8 的 "goodies" 的日子,但其中 none 确实是 Java "at the core";理解,他们不使用 JVM,他们不使用 Java 编译器。

最近的消息表明,这肯定会在 "Android N" 中发生变化(实际上将使用 OpenJDK)。这是个好消息。此外,关于第 1 点,您可能还记得臭名昭著的 Oracle vs Google 案例,关于 API 是否受版权保护...这仍然尚未完全解决。