Java的笑能有可能是Android的最大敗筆嗎?

Java的笑能有可能是Android的最大敗筆嗎?

Android官方標準的程式開發環境是Java,所以目前的應用軟體應該大部份是用Java寫的吧,而眾所周知Java的執行是直譯式而非如C/C++/objC是編譯式的,直譯式的優點是較易達成單一程式碼跨軟硬體平台直接執行,但這點Java也好像只有在瀏覽器內執行的Java applet做得較為成功,至少還能跟Flash鼎足而立;而直譯式的超大缺點則是執行效能遠低於編譯式的,以及無法做到跟系統較為相關的應用,再加上優點達成率低或單一程式碼跨平台的需求不高,因此也造成目前Win、Mac、Linux等三大桌機OS上的知名或常用的應用軟體用Java寫的仍寥寥可數。

Android採用Java的優勢似乎看不太到,但Java直譯式的執行效能遠不如編譯式的原生機器碼應該是千古不變的真理吧,所以在此請教大家,Java的笑能有可能是Android的最大敗筆嗎?
這個問題可以不用擔心, Java之所以效能比C/C++更低, 主要是透過了一層JVM(爪哇虛擬機器), 雖然能跨平台, 但多透過一層速度一定會慢一些..

可是在google Android 上面的Java, 其實只是語法上面長得跟Java一模一樣, 實際上骨子裡的VM已經被google的人砍掉重練了XDD 而不是由原本SUN所提供的Java ME平台..

這樣速度上不用擔心, 只是寫出來Android程式可能就比較難移植到別的Java ME手機了.

請參考 : http://www.ithome.com.tw/itadm/article.php?c=49735
"笑"能...

這到底是什麼東西??

是因為JAVA在Android上無法發揮呢??
還是根本就是個笑話??
注音字先改一下,看了挺礙眼的。

第一,byte code在compile以後如果不是因為在windows上運行要透過一層JNI和driver溝通,其實運作的效能是很高的,不信的話寫個multi-thread丟到solaris上面跑用樣的演算法,看誰快。

第二,google 的jvm是google版的jvm,對driver的支援是看android在linux base對driver的支援程度,不要把windows系列的東西和機器人相比。

第三,java的程式仍是目前platform dependent最低的,well,可能還有個action scrip,不過adobe在flash10都還沒支援GPU運算,看來要追上java還有一段路要走。java的程式再爛,改一改還真的是到處可以跑,嗯?你說assembly或c比較快,沒錯,但用這些寫只怕一年以後market上還是只有三兩支小程式,這樣android還有搞頭嗎?
hadce wrote:
第一,byte code在compile以後如果不是因為在windows上運行要透過一層JND和driver溝通,其實運作的效能是很高的,不信的話寫個multi-thread丟到solaris上面跑用樣的演算法,看誰快。...(恕刪)


這段話讓小弟回憶起大2上下學期的JAVA課程

用Solaris的作業系統學JAVA...
java c xxx.jar
java xxx.jar

而且還是Client式的主機,真是很有樂趣的課程,不過多執行緒真是難懂
yencd wrote:
"笑"能...

這到底是什麼東西??

是因為JAVA在Android上無法發揮呢??
還是根本就是個笑話??
報歉,讓有些人看不懂我在說什麼。

小弟說的笑能是一語雙關,意指好笑或可笑的效能。

這應該是很多人對Java的既定印象吧,所以小弟才PO此文請教大家Android難道不怕被Java的效能拖垮嗎?

hadce wrote:
第一,byte code在compile以後如果不是因為在windows上運行要透過一層JND和driver溝通,其實運作的效能是很高的,不信的話寫個multi-thread丟到solaris上面跑用樣的演算法,看誰快。
請問byte code在Android的執行應該也是採直譯式而非事先編譯的吧?
hadce wrote:
java的程式再爛,改一改還真的是到處可以跑,嗯?你說assembly或c比較快,沒錯,但用這些寫只怕一年以後market上還是只有三兩支小程式,這樣android還有搞頭嗎?
可是Linux下用C/C++寫的軟體應該遠比用Java寫的多很多吧?
叫他們改寫成Java會不會比改寫成跨OS平台還困難很多?
chihyi1980 wrote:
這樣速度上不用擔心, 只是寫出來Android程式可能就比較難移植到別的Java ME手機了.

請參考 : http://www.ithome.com.tw/itadm/article.php?c=49735
可是這篇沒說Android的Java效能已不同凡響啊?
小弟之前有研究過CDC VM (藍光播放器中的Java VM),是SUN的RI (參考實作版),從interperter, JIT compiler到GC都有看過原始碼, 最近也在看Android的Dalvik VM,以下有一些心得可以跟您分享

1. Java的效能比較差嗎?

很多人都把runtime的效能當作絕對比較指標,但是他們常常忽略到的是軟體開發的彈性與速度,在Java中透過標準API寫出一個類似MSN的聊天軟體(UI, data persistence, TCP/IP socket....etc)可能只需要N倍時間,但用C/C++可能需要3N甚至到10N以上的時間。

另外,現在能從SUN網站上download的JVM,都搭載了Just-In-Time compiler,這是一種動態Java method compiler,以Java method (A.doSomeThing())為單位,能夠動態的在程式執行時根據熱門程度編譯成機器碼(存至code cache)或只是直譯某個Java method,所以Sun也使用 "Hot Spot" VM作為產品名稱

所以,其實在JIT compiler的實作持續改進下,Java的程式執行效能已經近乎執行機器碼相同的速度。還以為Java執行效能比較差的人,其實已經落伍至少兩至三年以上

現在Sony PS3, HTC Magic/Hero裡,其實都有虛擬機器VM的足跡。(PS3 使用IBM的CDC VM)

2. Android裡的VM效能如何?

首先,Android裡的VM不能稱為JVM,因為整個軟體開發框架中,Java只存在於程式寫作階段,在deploy階段就已經被dx這個tool,把.class轉換成.dex,這是一種特殊的binary格式,類似class,但是其有更先進的設計架構。

Android的VM稱為Dalvik VM,它只執行.dex檔,並且搭配Zygote(Android OS中的process管理器,其會preload所有的系統library,每個獨立的Android程式有各自的process,但卻可以share同一份library,例如android.os.*,這樣可以節省runtime記憶體),以系統化的方式整合進Linux系統,因此DalvikVM相較於Sun實作的CDC/CLDC VM,有著更節省記憶體的優勢,這樣間接的讓整體系統運作速度變快很多。

此外,很有趣的是,當Sun不斷的以JIT為核心,甚至在CLDC VM中也有JIT時,Dalvik VM在第一時間卻不使用JIT技術。

原因無他,也是因為記憶體。

JIT compiler,就是compiler,其編譯bytecode(8位元指令)轉換為機器碼(16, 32 or 64位元指令),這對於整體native code size是增加的,因此JIT compiler其實在嵌入式系統裡的記憶體使用量反而是增加的且間接的造成運作效能下降。因此DalvikVM只使用Intepreter作為bytecode execution engine。

什麼,這樣不是更慢?

現在有試用過HERO的人就知道,其順暢程度直逼iPhone 3G,其原因就是其利用Java programming API與JNI的優勢,把常使用的功能切出來,盡量使用JNI直接用C/C++實作,再包裝成Java API,提供AP實作使用,例如Camera, GPS, Telephony, UI等API,因此Android程式一開始的進入點是interpreter執行沒錯,但到後期幾乎都是native code在運作。透過API隔開耗時與較不穩定的功能邏輯,AP實作者與系統廠各自分責,所以Android程式/OS的效能與一般也具有多工背景執行的OS相比,穩定且快速許多。

總結

對Android有興趣的人可以去看看VM或Framework原始碼,會發現Google工程師真的比你我都聰明許多,其解決了嵌入式 Java VM傳統的問題,但卻延展了Java的優點,並且以優異的SDK為核心,統一了整個軟體供應鏈,讓大家都有事作有飯吃,對大家皆有利益。

當然Android也有許多缺點,例如
1. Android Framework版本持續變動,讓AP開發者常常無所適從
2. Android Low Memory Killer號稱可以自動回收process,但實際上user還是需要手動砍,才能順暢使用
3. APK的DRM問題目前只有Google自己有解決方案

有興趣的人可以來看看小弟無聊時寫的blog
http://brightcore.blogspot.com/

如果小弟有說錯之處也請不要客氣,用力指正不要緊,感謝。

另外,回應你 Android的Java"笑"能,我想,大部分都是好用到笑出來吧,哈哈。
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 8)

今日熱門文章 網友點擊推薦!