繁体   English   中英

用Java编写的程序是否比嵌入到Objective-C for iOS中的C语言编写的程序慢?

[英]Are programs written in Java for Android slower than equivalent written in C embedded into Objective-C for iOS?

为了确定开始将现有的iOS应用程序(用C语言编写)移植到Android是否合理,我必须估计如果用Java实现它的速度有多快。 一些问题是Java代码必须翻译多次(到字节码,然后到使用JIT的本地代码)。 它可能会对实时属性(响应性)产生负面影响,对吧?

生成代码的质量如何? 它在某种程度上与gcc / llvm生成的代码相当吗? 如果是,您是否参考了比较结果(纸张)?

好问题。 几年前,与本机代码相比,Sun(现在的Oracle)JVM的性能会很差。 事情 发生了 变化

首先,运行Android的VM不是您的标准JVM。 它是由Google重写的专门用于移动应用的强化虚拟机,其中UI性能优先。

其次,在过去十年中发生了很多事情...... 这篇相关文章的引用很好地说明了: Fifteen years ago, all we thought that Java needed to rule the known universe was a faster VM. 我们现在拥有更快的VM。

最后,在性能方面,有很多关于iOS和Android之间的比较的文章。 是第五个链接,只是为了踢。 那里有更多的东西。 它归结为几个因素 - 您需要运行什么类型的代码,您的性能期望是什么,以及您愿意投入多少资金来挤出最大的收益。 如果您认为Dalvik是您的瓶颈,您就能够编写本机C / C ++并在Android中使用JNI。

您无法以这种方式比较性能。 您的应用程序将在具有不同性能特征的不同硬件上运行。 与硬件的影响相比,java / objective c之间的性能差异很可能是微不足道的。 您应该分析应用程序的瓶颈并检查目标硬件是否可以支持它。 如果它在java中实现并不重要那么多。

作为测试我曾经写过一个测试应用程序,它在一个大的随机列表上执行排序算法。

C版本的运行速度比同一Java版本快10倍。

我怀疑你通常会看到Java的运行速度比同一平台上的等效C慢5倍。

它运行的平台也会影响当然的速度。

即使你不应该关心它,是的,Java字节码可能会稍慢。 如果你完全担心性能,那么你可以使用NDK,并用C(++)编写大部分应用程序。

决定是否移植到另一个平台通常来自业务方面,而不是工程方面。 至于速度 - 这取决于。 同时JIT往往非常快,它在运行时使用了一些优化,这些优化不适用于C编译程序。

然而,如果不知道你的程序做什么,就不可能预测移植可能带来的性能损失或优势。

并且可以选择使用从Android应用程序访问的本机C代码 - 它的性能取决于硬件并且是可预测的。

Android Java并不像您想象的那样完全解释。 事实上,Java字节码甚至没有进入设备,因为dalvik VM(android的JVM)不解释它运行的DEX字节码的Java字节码更接近本机处理器格式。 因此,基于知道一个是Java而一个是本机代码,很难“猜测”或推断Objective-C和Android之间的性能差异。 更不用说你也有他们的OS进行比较:Linux变体与Mach内核。 然后,Android不会以与iOS相同的方式将程序映射到进程。 鉴于语言,操作系统,系统映射以及底层SDK代码的变化存在差异,如果您遇到性能问题,如果没有做一些工作,您实际上无法做出决定。 但是,这真的不应该重要,因为如果Android上的程序需求和需求,市场力量应该比性能问题更具吸引力。 你知道一句老话:“如果这对你真的很重要,你就会找到办法。如果没有,你会找借口。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM