由于 java 实现 ( OpenJDK
) 和 Android 的虚拟机 DalvikVM 都是开源的,因此必须可以在 Google 的 DalvikVM 上实现 Sun 的 JavaVM。这将使Clojure, Jython
在 android 上开箱即用地运行基于 JVM 的应用程序和语言 ( ) 成为可能。
是否有持续的努力来产生这样的 Sun JVM 实现?
OpenJDK 使用本机代码,因此它是一个重要的端口……至少有一个用 Java 编写的 VM ( JikesRVM ),不幸的是它不是一个完全可用的 Java 实现。
由于 DalvikVM 运行从 .class 文件转换的类,因此应该可以转换这些类。那么“唯一”的问题是当语言动态生成字节码时——因为它需要在程序在 DalvikVM 上运行时将生成的字节码转换为 DalvikVM 格式的额外步骤。
嗯.... 一种 JITT(即时翻译器),可在手机运行时将类文件转换为 DalvikVM 文件。我想知道那会有多慢。
将 OpenJDK 移植到 Android 平台是可能的。有这样的努力:Shark、Zero 和 caciocavallo,它们极大地简化了端口过程(= 没有 ASM,简单的 AWT 对等体)。此外,Android 只不过是一个 linux 内核。唯一的问题是任何人什么时候完成?
顺便说一句,iphone 和 android 手机都安装了 Jazelle 兼容的处理器,非常欢迎具有非常强大的处理器黑客技能的人将 Jazelle 支持添加到 OpenJDK。这样做,我们可以选择:非常轻的资源加速 (Jazelle) 和 JIT ;-)
关于 iPhone,也是一样的:端口是可能的。只有 Apple 在 iPhone 许可证中加入了明确禁止使用 VM 的部分。根据欧洲法律,对我来说,这个许可证部分是非法的。两个原因:您不能强制/链接购买您的两种产品。在这里,我调音和 Iphone 是链接的。你不能拒绝卖你能卖的东西。在这里,一旦为 iPhone 构建了 VM,如果它被拒绝放入 iTune 商店,那么这一点将适用。世界上有没有人想挑战苹果许可的合法性?我不这么认为,不开心的人会飞到 Android 或任何其他平台。
与此同时,我找到了一个可能的解决方案(仅限 JavaME):
从技术上讲,应该可以解释 dalvik vm 上的热点字节码或 dalvik 在热点上的字节码,但从长远来看,它永远不会是高效的(更不用说优雅的)设计。这样做的成本可能会变得非常高,尤其是在这种分裂的生态系统的未来演变中的维护方面。
我认为,从一开始,dalvik vm 就是权力/市场控制问题,而不是改进 Java 虚拟机生态系统的创新努力。dalvik vm 和hotspot vm 是横跨同一条河流的两座高速公路桥,彼此平行,相距五米。它分裂并给Java技术生态系统带来混乱。
在我看来,谷歌绝对是在过去十年中做出创新贡献的技术领导者,使保守得多的预言机相形见绌,但在这个主题上,他们几乎以破坏性的方式动摇了 Java 生态系统。我们(程序员)应该为这个问题争取一个统一的解决方案。无论如何,这就是“虚拟机”概念背后的主要思想——它既不属于谷歌也不属于甲骨文。
尝试使用 debian Wheezy 的 GNURoot 应用程序(proot ptrace 容器);
apt-get update
apt-get install openjdk-7-jre
/usr/lib/jvm/java-7-openjdk-armel/jre/bin/java ...
(包括长路径)
我不认为问题是技术问题。例如,理论上您可以将 OpenJDK 迁移到 iPhone,但存在法律限制。
有关Android ARM apk 的 MIDP、Foundation 和 Personal Profile jvms,请参见http://davy.preuveneers.be/phoneme/ 。(谢谢戴维!!!)
我已经重新打包了 Foundation jvm 以供命令行使用,并将其托管在 vkfox.com/android/bin/foundation-jvm.bin 以供您使用。可以使用 JavaIDEdroid 免费应用程序中的 eclipse 编译器,或带有此 jvm 的旧 kopi 或 kopisusu 编译器,以及来自 J2ME jdk 的存根 cdc + 基础 jar 文件,用于板载开发系统。使用 TerminalIDE 的功能——控制台和 sun 编译器——以及指定的 ref jar 也可以帮助您实现目标。这本质上等同于带有 MIDP 或 awt 图形可能性的无头 jdk1.4。