用Android编写的Java程序比用Objective-C for iOS编写的C编写的等效文件慢吗?

为了决定是否有理由将现有的iOS应用程序(用C语言编写)移植到Android上,我估计如果用Java实现,速度有多快。 有一点值得关注的是,Java代码必须多次翻译(字节码,然后转换为使用JIT的本地代码)。 它可能会影响实时属性(响应)消极,对吗?

生成的代码的质量呢? 它与gcc / llvm生成的代码有某种可比性吗? 如果是的话,你有参考比较结果(纸)?

Solutions Collecting From Web of "用Android编写的Java程序比用Objective-C for iOS编写的C编写的等效文件慢吗?"

好问题。 几年前,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. 我们现在有一个更快的虚拟机。

最后,关于iOS和Android在性能方面的比较,已经写了很多。 这里是第五个链接只是踢。 那里有更多的东西。 这取决于几个因素 – 你需要运行什么types的代码,你的性能期望是什么,以及你愿意投入多less钱来挤压你的压力。 如果您认为Dalvik是您的瓶颈,那么您可以编写原生C / C ++并在Android中使用JNI。

作为一个testing,我曾经写过一个testing应用程序,在一个大的随机列表上执行sortingalgorithm。

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

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

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

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

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

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

然而,无法预知移植过程中可能产生的性能损失或优点,而不知道程序的function。

而且可以select使用从android应用程序访问的本地C代码 – 它的性能取决于硬件并且是可预测的。

Android Java并不像你所想的那样被完全解释。 事实上,Java字节码甚至不会将它传递给设备,因为dalvik VM(android的JVM)不解释Java字节码,而是运行更接近本机处理器格式的DEX字节码。 因此,仅仅基于知道一个是Java而另一个是本地代码,就很难“猜测”或外推Objective-C和Android之间的性能差异。 更何况你有他们的操作系统来比较:Linux变种与Mach内核。 然后,Android不会像iOS那样将程序映射到进程。 考虑到语言,操作系统,系统映射以及底层SDK代码的差异,如果您将要遇到性能问题,您实际上无法做出一点小小的工作。 但是,这真的不应该,因为如果您的Android程序需求和需求,市场力量应该比性能问题更引人注目。 你知道那句老话:“如果对你来说真的很重要,你会find办法的,否则你会找借口的。”