2014-08-29 32 views
0

我在java中編寫了一個由O(n)單個循環組成的方法,該循環創建一個ArrayList並向其中添加元素,並花費幾秒鐘來處理〜10000個條目。但是,我的android應用程序需要1到2分鐘來執行相同的任務。我並沒有特別要求如何解決這個問題,而是在腦海中引發了這個問題:什麼因素使得java代碼在我的筆記本電腦上運行速度較慢?影響Android應用程序速度的因素有哪些?

具體來說:

  • 是Android的處理能力低?
  • 是因爲android處理任務的方式不同嗎?
  • 可以採取哪些步驟使應用程序更加省時,特別是在處理大量數據時?

回答

2

處理器類型和設計(包括指令流水線,高速緩存,和數據局部性的深度 - 可能ARM VS Intel),系統庫存儲器帶寬,操作系統和運行時環境中的實現(一個用於速度被優化,一個用於節省空間/電力)。

這些都是工程權衡,需要將設備放入口袋並帶有內部屏幕和內部電源。

1
  1. 是的,它可能是。手機需要更省電和更慢的處理器。
  2. 不,因爲手機和筆記本電腦都運行(幾乎)相同的JRE,所以應該沒有區別。如果你在你的電腦上安裝Android並執行smae代碼,它的運行速度將與windows下一樣快。 3.我只能幫助你讓代碼更有時間如果你發佈它。請注意,如果代碼執行10000次,即使是小的改進也不能加起來。
+0

你的第二點完全不正確。桌面代碼通常運行在標準的JRE(Java Runtime)中,而Android運行稱爲Dalvik的自定義運行時(以及未來的ART - Android運行時)。這也會對執行速度產生巨大影響,因爲它們是針對不同的設計目標而量身定製的。 – free3dom 2014-08-30 08:54:51

0

@Elliott Frisch給出的answer是100%正確的,並且涵蓋了對執行速度有影響的所有內容。

但是,我認爲強調軟件差異以及Android上的運行時實現與通常在桌面上使用的實現完全不同是非常重要的。

在桌面上,Java代碼被編譯爲java字節碼然後由Java Virtual Machine執行。該虛擬機通常針對桌面運行的任何硬件和操作系統的速度進行優化。

在Android側相同的Java代碼也編譯爲字節碼,但它是非常不同的,並且是由在Android特定Dalvik運行時,它是(通常)爲效率(省電等)優化的執行,而不是純粹的速度。

Android(L)的下一個版本設置爲用一個更加快速的版本替換這個運行時(稱爲ART (Android Runtime)) - 它將使用AOT(AOT)編譯代替Just-In-Time (JIT),這應該加速執行。

考慮到所有這些,可能會認爲,鑑於完全相同的硬件,桌面和Android之間的執行速度可能仍然存在差異。事實上,對於在不同的桌面操作系統(Windows vs Linux vs OSX)和不同的Java VM上執行相同的Java代碼,情況也是如此。

底線是,儘管硬件在執行速度中扮演着最重要的角色,但運行時環境對代碼的執行速度有着非常重要的影響。

相關問題