Android 对动态语言不利

Posted

技术标签:

【中文标题】Android 对动态语言不利【英文标题】:Android Adverse To Dynamic Languages 【发布时间】:2010-11-01 16:24:36 【问题描述】:

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

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


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

我想学FP

我真的不想学 Java

Clojure 好像有一些很 有趣的语言概念(STM 例如)。

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

【问题讨论】:

【参考方案1】:

Dan Bornstein 给了一个presentation on Dalvik at Google I/O。值得一看的是了解整个系统,包括您关心的约束。非Java语言编译成Java字节码的具体问题出现在问答环节。

Remco van 't Veer 有一个github project,他在其中修补了 Clojure 以在 Android 上工作。 Tim Riddell 写了一个tutorial on how to use it。

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

【讨论】:

【参考方案2】:

Android 只是 got scripting

【讨论】:

我不确定你是否理解我的问题哈维尔。 @onorio:可能不完全是,因为您说的是基于 JVM 的语言;但是如果你想要任何脚本语言,现在 android 支持一些'本机',而不需要中间的 JVM,这是目前脚本的一个相当大的性能瓶颈。【参考方案3】:

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

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

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

【讨论】:

@Sean McCauliff,该补丁是否解决了 Clojure 的启动性能问题?我正在学习 Clojure(想要它的 FP 部分)为 Android 编程,但我遇到了启动时间的一个主要问题。据我所知,启动时间问题尚未得到解决——除非补丁解决了它。【参考方案4】:

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

除了 Android SDK 非常健全且易于编写之外,我认为使用其他东西不会给您带来很多好处。

【讨论】:

【参考方案5】:

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

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

【讨论】:

LuaJIT 是一个反例。也适用于 Android。

以上是关于Android 对动态语言不利的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | x86 汇编语言分析 )

Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )

Android 逆向arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )

玩转C语言动态内存,轻松管理动态内存空间

玩转C语言动态内存,轻松管理动态内存空间

一篇文章玩转C语言动态内存,轻松管理动态内存空间