• 8

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

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

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

框當...框當,無知並不可怕,可怕的是半瓶水響叮噹...
自各大學資訊科系大一新生改教java後,很久沒看過這麼離譜的說法,你的資訊落後了最少十年

java程式是採混合式執行,先直譯一段時間,遇到效能瓶頸的部份就改編譯(JIT),執行速率基本上很接近C,在某些測試中還能勝過C,缺點是消耗的記憶體較多

flash的actionscript也非直譯,在某個版本後就已導入JIT的方式執行,可以說隨著編譯器理論的進步,純直譯式的語言變的越來越少

java applet也不算成功,普及率遠輸flash,更別說鼎足而立

事實上java桌面的失敗也與執行速率無關,主要是輸在
1.程式載入速度(最致命的一點)
2.SUN在桌面應用的技術太兩光或說審美觀太特異,用swing開發的程式外觀(metal)讓很多使用者不習慣
3.API繪圖缺乏硬體加速,導致界面操作很不靈敏
其中2,3兩點在java 1.4以後有很大的改善,但已經讓很多程序員喪失對java桌面的信心

Apple就好多了,在mac os x可以用java寫出又快又漂亮的程式,完全看不出來是用java開發,不過卻喪失了可攜性,因為用了os x專屬的cocoa api

事實上java的桌面應用沒有失敗到寥寥可數,雖然不多,但也有一定的數量,如現在最強大的免空下載器 JDownloader

Android採用Java的優勢似乎看不太到,但Java直譯式的執行效能遠不如編譯式的原生機器碼應該是千古不變的真理吧,所以在此請教大家,Java的笑能有可能是Android的最大敗筆嗎?

沒有什麼是千古不變的真理,尤其是在快速發展的計算機領域,只能說某個理論在特定時間是正確的

有種東西叫java chip,很多java手機都有裝,保證讓你的java程式跑的比C還快,不過Android的java程式並非bytecode格式,很有可能無法加速

至於Andorid採用java有什麼優勢,我懶的多說,反正和其他java手機的理由差不多
就跟ruby越來越流行的道理一樣,執行速率在很多應用領域並非最重要的考量,開發效率、除錯難易度、可攜性、目的碼大小這些因素反而更重要

再說android免授權費又開源,google又不是佛心來著,無聊燒錢寫一套作業系統送給手機製造商
當然想靠平台優勢大力推廣內建的各項google服務,手機的性能只要能跑瀏覽器就夠了,執行速率變的很次要,我惡意的猜測,這也是dalvik vm遲遲沒有JIT的原因,因為google根本不在意單機的效率,一切皆交給雲端計算
chihyi1980 wrote:
剛好相反, 這一篇已經完全說明了Java這個語言在Android平台上的運作方式有多大的差別.

既然google的開發者從底層開始就重新打造一個新的VM, Java變成了一個開發的語言, 而不是一種執行環境.

不然,只移植java language完全不夠,我熟悉java只要半天,但熟悉java API用了好幾個月
java號稱三位一體(java language, java API, jvm)
最起碼要語言跟API同時移植(執行環境),程序員才能無痛的轉換,否則就喪失了採用java的好處


就不能拿舊有的SUN Java VM的執行速度來看待, 而是要看google如何重新的把用"Java語法"所寫的code.

如何去產生出一個針對新VM所進行優化的byte code.. 如果速度上跟舊的一樣快, 那google幹嘛重寫呢..

重新發明輪子,輪子卻沒有原本好用,這種狀況在業界還有社群並不少見,事實上dalvik vm比kvm慢很多,因為沒有JIT

google分裂java並非出於技術上的理由,更多是政治還有商業上的決策
1.手機支援j2me必須向SUN支付授權費,而dalvik vm並非java,無須向SUN繳納授權費,可大幅刺激手機廠採用android
2.JCP和SUN的效率太差,已經被人詬病很久,若android走j2me的老路,android sdk很難像現在這樣快速演化,就像微軟每次新版的.net framework都有大變動,一堆程序員都叫苦連天
larz93 wrote:
再說android免授權費又開源,google又不是佛心來著,無聊燒錢寫一套作業系統送給手機製造商
當然想靠平台優勢大力推廣內建的各項google服務,手機的性能只要能跑瀏覽器就夠了,執行速率變的很次要,我惡意的猜測,這也是dalvik vm遲遲沒有JIT的原因,因為google根本不在意單機的效率,一切皆交給雲端計算


Google I/O 2008 - Dalvik Virtual Machine Internals

不用猜測,影片是DalvikVM的開發leader解說DalvikVM內部架構
拉到 00:20:00 有講到為什麼不用JIT的原因



而且就我對JIT的了解,在Android手機這種計算資源與記憶體資源皆有限的環境下,用JIT效能反而會更差。
yrulee wrote:
不用猜測,影片是DalvikVM的開發leader解說DalvikVM內部架構
拉到 00:20:00 有講到為什麼不用JIT的原因

而且就我對JIT的了解,在Android手機這種計算資源與記憶體資源皆有限的環境下,用JIT效能反而會更差。

目前開發社群已經出現很多聲音抱怨Dalvik效能太差,要求趕快加入JIT的支援,有人甚至在研究如何將DEX放到CVM上執行

JIT消耗資源的多寡,其實要看演算法,google的說法不一定正確,V8比tracemonkey快了兩到三倍,但資源消耗也是兩到三倍,這類空間與時間的tradeoff不用我多說吧

android手機的資源有限,這是相較於PC的說法,支援multitouch的智慧型手機最起碼的市場定位也是高階,沒道理更低階的java手機能從JIT受益,高階的android反而不行

簡單說吧,JIT只是一項選擇,若目標手機的記憶體真的太少(山寨廠?),手機廠可以關閉JIT

JNI不是萬靈丹
1.這個機制本身就有一定的overhead
2.要預先編譯為native code,所以只適合系統開發者(手機廠的工程師);由於android硬體的開放性,應用開發者用了反而會喪失可攜性

我認為google沒有實做JIT的原因
1.android硬體架構為開放性,而JIT這種高度硬體相依的軟體,google認為是手機廠的責任
2.07年就有android的消息,但到08年十月才有第一支android手機上市,可說延遲了不少時間,而JIT又是非常複雜的技術,若要實做、驗證JIT,所花費的時間不利於推廣android的時程

我認為google應該定義JIT的介面,實做與硬體架構無關的前端(parser, optimizer),然後留下後端的介面給手機廠去實做


目前開發社群已經出現很多聲音抱怨Dalvik效能太差,要求趕快加入JIT的支援,有人甚至在研究如何將DEX放到CVM上執行



只注重VM execution engine效能的時代已經過去了,過去SUN把核心重點都放在執行效能上,但是諷刺的是能夠有高度邊際效益,並能與Android相提並論的,就連手機裡CLDC VM,以及在藍光播放器/MHP set-top box的CDC VM都達不到。

1. CLDC VM雖然可以引入ARM的DBX或RCT技術,效能增進了,但是UI/user experience/系統API整合性依舊達不到consumer/developer的期望
2. CDC VM普遍內建於藍光光碟播放器中,但是其用途只能拿來作選單設計與一些簡單的小遊戲,根本發揮不到什麼JIT的效能

JIT在Sun的許許多多例子中,尤其在embedded VM,的確是有用處的,但是其花費的成本高過其用處太多了。

Dalvik VM只是Android OS的小小部分,其重要也最強大的,是其系統化的思考,其核心目的是節省記憶體,因此其不使用JIT,而把所有interperter改用assembly寫,極盡可能使用JNI去補強耗時的程序,而市場證明這樣的整體設計架構是被使用者接受的。

就算DalvikVM要加入JIT,我想唯一的動機是因為要把Android放在PC上跑,這樣的話JIT才會發生它的強處。但是就現階段幾乎都是手機平台的情況下,實作JIT是一件十分耗時耗人力卻又收不到相對邊際效益的做法。

另外,就算DEX能夠運行在CVM上,那也只是東施效顰而已,無任何實際用處。就算會比較快速,它也永遠不是Android OS的一部分。



JIT消耗資源的多寡,其實要看演算法,google的說法不一定正確,V8比tracemonkey快了兩到三倍,但資源消耗也是兩到三倍,這類空間與時間的tradeoff不用我多說吧

android手機的資源有限,這是相較於PC的說法,支援multitouch的智慧型手機最起碼的市場定位也是高階,沒道理更低階的java手機能從JIT受益,高階的android反而不行

簡單說吧,JIT只是一項選擇,若目標手機的記憶體真的太少(山寨廠?),手機廠可以關閉JIT



我之前在玩CDC VM時,在x86平台上,有JIT與沒有JIT的比較至少能差10倍
但是那可怕的code cache,runtime compiler侵蝕到regular app,也讓我對其印象深刻。

這對於Android那種預設memery大小只有64MB + ARM的device,根本沒有trade off的空間。

即便是未來手機的CPU與memory都增進,但threshold多半設在執行10~30次開始對hot method進行runtime compilation,而consumer device很少有method是會被執行到這麼多次的,即便是有,多半也移到JNI method中,所以JIT對於手持式裝置用處其實並不明顯。

JIT是可以為一項option,但是光是讓此option實作出來就會耗掉可怕的成本,Sun當初時作CLDC JIT,光是一個JIT,3~4人的團隊,整整花了兩年的時間。



JNI不是萬靈丹
1.這個機制本身就有一定的overhead
2.要預先編譯為native code,所以只適合系統開發者(手機廠的工程師);由於android硬體的開放性,應用開發者用了反而會喪失可攜性



JNI的確不是萬靈丹,但是與JIT相比,它一定是比較好,而且好很多的選擇。

如果我只是需要一個玩具模型,我是要自己手動去組合一個?
還是要去打造一個組合工廠,然後請這個工廠幫我去組合這一個玩具模型?



我認為google沒有實做JIT的原因
1.android硬體架構為開放性,而JIT這種高度硬體相依的軟體,google認為是手機廠的責任
2.07年就有android的消息,但到08年十月才有第一支android手機上市,可說延遲了不少時間,而JIT又是非常複雜的技術,若要實做、驗證JIT,所花費的時間不利於推廣android的時程

我認為google應該定義JIT的介面,實做與硬體架構無關的前端(parser, optimizer),然後留下後端的介面給手機廠去實做



說的沒錯,Android的確是想要讓手機廠去作JIT
http://developer.android.com/reference/java/lang/Compiler.html

說的直接一點,如果JIT真的很重要,以Google的技術能力早就作了,而不是保持著像現在一樣是觀望的態度。

且實際上,手機廠根本不敢去碰DalvikVM Internal,更遑論要實作JIT了。所以HTC最多是porting driver,寫寫上層UI/AP,對中間的DalvikVM能遠觀而不可褻玩,因為JIT後端code emitter 部分,大量的assembly code不是系統廠吃的下來的。


JIT不是不能作,而是就現階段的客觀因素,是不值得作的,不論是對Google還是手機廠。
順便一提
基於Android的掌上遊戲機已經出現
http://www.hardkernel.com/
rrl wrote:
順便一提
基於Android的掌上遊戲機已經出現
http://www.hardkernel.com/
可惜不是遊戲手機。

順便一提
該網站AntiVir小紅傘說有毒!?
這篇~~從頭到尾看下來~~
雖然看不懂的地方也是很多!!
不過,都沒有謾罵叫囂或是嗆聲~~
超優質的一篇討論....
也學了不少東西說~~
讚...


不過......剛剛看到某一樓有個聯想
微軟從電腦做到手機~~
windows發展到有windows mobile
那android會不會到後面來是
反著走...
從手機的OS發展到PC上...
未來,搞不好大家裝的不在是微軟windows
而是安裝免費的android...
給我個理由,憑什麼我拍照片還要拍到你喜歡??你有付我錢?
我是程式設計的外行人,看到這裡就我的理解,Android的系統架構是

App-VM-Andorid(Linux) 這樣沒錯吧?

我不懂的是為什麼Google要多加一層VM?

直接 App-Android(Linux) 不是更快嗎? 為什麼要多加一層VM來拖慢執行效率?

沒有這一層VM的話,程式就可以用C/C++來開發,這不是一舉兩得嗎?

能不能請懂這原因的網友解譯一下給我這外行人聽
rheinhard wrote:
我是程式設計的外行人...(恕刪)

小弟也算外行,不過如果你知道了JAVA的好處,很難再回去寫C...
這是指程式開發人員的感受,使用者當然是希望速度快一點
不過軟體生不出來你又怎說XD?
大大可以去看看VM到底是什麼玩意兒,當初SUN不是這麼說的嗎?
write once, run everywhere!
[BLOG http://www.phototalks.idv.tw ]
  • 8
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 8)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?