30

我相信我在某个时候读到,由于 Android 在 Dalvik VM 上运行,JVM 的动态语言(Clojure、Jython、JRuby 等)很难在 Dalvik(以及因此在 Android)上获得良好的性能。如果我没记错的话,原因是在幕后,为了实现动态类型,对 java 字节码进行了相当多的摆弄,而 bytecode->dalvik 翻译不会轻易接受这一点。

那么,如果我想为 Android 开发,我应该避免使用动态 JVM 语言吗?


编辑:我想我应该提供更多的上下文。我正在考虑使用 Clojure 为 Android 开发应用程序。我考虑使用 Clojure 有几个原因:

  • 我想学FP

  • 我真的不在乎学习Java

  • Clojure 似乎有一些非常有趣的语言概念(例如 STM)。

然而,当我尝试在 Clojure 中为 Android 编写应用程序时,我发现存在一个无法接受的性能问题。但我发现一篇博客文章说动态类型语言(例如 Clojure)会因为获取动态类型所需的字节码操作而出现问题。所以我在寻找独立的确认,这是真的还是不是。我应该知道,在这个特定问题中,所有动态类型的 JVM 语言都可以被视为相同的假设。我想我确实问了一个相当广泛的问题,所以我想我不应该对人们不太明白我在问什么感到惊讶。

4

5 回答 5

17

Dan Bornstein在 Google I/O 上发表了有关 Dalvik 的演讲。值得一看的是了解整个系统,包括您关心的约束。在问答期间出现了编译成 Java 字节码的非 Java 语言的具体问题。

Remco van 't Veer有一个github 项目,他在其中修补了 Clojure 以在 Android 上工作。 Tim Riddell写了一篇关于如何使用它的教程

正如@sean 在这里提到的,有时存在比性能更大的问题。Dan Bornstein 在约 54:00 的视频中被问及 Jython 时进行了讨论 目前不支持动态生成字节码的动态语言(因为字节码翻译在运行时不可用)。

于 2009-07-04T08:41:07.287 回答
3

Android 刚刚有了脚本

于 2009-06-10T02:34:09.060 回答
2

有一些补丁可以使 clojure 工作。

http://riddell.us/tutorial/clojure_android/clojure_android.html

我认为真正的问题是某些动态语言使用字节码生成器。他们不会为 Davlik VM 生成字节码。因此 eval 将不起作用。

于 2009-06-10T02:12:37.467 回答
2

鉴于手机运行的硬件相对狭窄,您可能应该只针对 java 而不必担心动态 jvm 语言。据我所知,它们在 jvm 上的动态语言不会像 java 那样高效。

此外,Android SDK 非常健全且易于编写,因为我认为使用其他东西不会有很多好处。

于 2009-06-10T02:17:15.867 回答
1

JVM 的动态语言很难在 Dalvik 上获得良好的性能

动态语言很难获得良好的性能,时期。如果您想要性能,请使用静态类型语言,如 Java(或 C#、F# 等)。

于 2015-04-28T08:59:52.590 回答