簡體   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