#### Dalvik是啥呢?
從未知道冰島有Dalvik這么一個重要的村莊,直到Dan Bornstein將自己為Android系統編寫的進程虛擬機命名為Dalvik后才被我所知。
它是Android系統獨有的,主要作用就是使得已轉換為 .dex(即Dalvik Executable)格式的Java應用程序在Android系統上運行。
它是Java運行在Android系統的基礎。那么問題就來了,有標準的Java虛擬機JVM,為啥還要新造一個Dalvik呢?
答案很簡潔,就是為了更加適合資源十分有限的嵌入式系統。
也許Google進行了很多努力使得Dalvik比JVM在Android上更高效,但是業界最終還是不滿意,認為Dalvik拖慢了Android的速度。
在Android4.4中Google進行了另外的嘗試,那就是ART(Android Runtime)的技術預覽。我當然也進行了切換(在設置--開發者選項---選擇運行環境),
結果是原來的應用會重新編譯(代碼預讀取編譯),變得很大,速度有多大的提升,我用肉眼去看還沒有太大差別,但官方公布的數據說提升還是很大的。
不過有些應用還不支持ART。在Android5.0中Google揮起大刀,終于將Dalvik砍掉,用ART完全將其替換掉。
#### Dalvik的口水戰
一年以前,我的閑暇時光是在玩微博中度過的。
有一天中午和齊天、周權午飯回來翻翻微博,看到“CSDN移動”發了這樣一條消息:
【Java通向ObjC語言的橋梁:谷歌J2ObjC 0.7新版亮相】Google近日發布了開源命令行工具J2ObjC的最新版本:J2ObjC 0.7。J2ObjC完全開源,通過它,開發iOS應用只需用Objective-C編寫UI部分代碼,其余功能均可用Java語言編寫實現。
我對這種轉換是不太感冒的,掃了一眼評論,一個id叫辦公軟件的評論我覺得有待商榷,他是這樣說的:
“Android不是Java,無非是用了Java語法罷了,運行層面上和Java基本無關。”
我覺得哪里有些別扭,也許他說的運行層面上和Java基本無關指的的Linux Kernel?但我理解的運行層面是包含了應用的運行以及FWK,那么跟Java就逃不了關系了。我就回了一句:
“不是單單用了Java語法吧?上層應用是Java Applications,從下向上數第二層的Android Runtime中的Dalvik 虛擬機,都是Java的存在。請看Android系統架構。另外,看看為什么google要提供NDK。”
沒想到我就是簡單的描述一下我的理解,卻造來了“辦公軟件”的指責:
“harmony的類庫, 照你這么說,我當年用J#包裝了一堆Java API, 也算是Java? 請不要這么不專業.”
我抱著心平氣和討論的態度,順著他說:
“兄弟,其實我們倆可以心平氣和的討論一些問題。J#是微軟用Java的語法來吸引原Java開發者,這個確實如你所說,只是Java的語法,但是J#使用的.Net運行時,仍是一種虛擬機。”
對方的傲慢簡直令人做嘔:
“很遺憾,對于一些連名詞都搞喜歡混淆的同學,我的面試時間只給3分鐘”
我一直壓著火,繼續回著:
“請問,我哪個名詞搞混淆?你說話之前不看人家的上下文么?還是沒理解別人說的重點在哪里?你這樣的面試官,偶一般只給一分鐘。還擺上老資格了,誰沒當過呀。。。呵呵”
“也許沒猜錯的話,你一直在認為我說的是“JVM = Dalvik VM”,但是我主要表達的是,Dalvik VM 是一種Java 虛擬機。無論怎樣,我這樣表達應該是成立的。歡迎圖草。”
結果話題有轉到了JVM與Dalvik上面了,對方也回了三條:
“Dalvik VM壓根就不符合JVM規范,你卻說這是Java虛擬機? 照你這么說,J#跑在CLR上,CLR也是Java虛擬機?”
“你主要表達的是,"Dalvik VM 是一種Java 虛擬機",奇葩啊奇葩, 哪門子來的Java虛擬機喲,”
“JRockit是一種Java虛擬機, J9 是一種Java虛擬機,ZingVM是一種Java虛擬機,Hotspot是一種Java虛擬機, 為啥這么定義? 因為他們follow了Java虛擬機的規范. Dalvik VM是Java虛擬機嗎? 估計只有你和你看的那邊書的作者才這么認為”
后來的爭論就在“Dalvik是不是一種Java虛擬機”這個命題上了。讓我想到了白馬非馬論,“求馬,黃黑馬皆可致,求白馬,黃黑馬不可致”。
但他的一些說法還是值得肯定的,比如:
“Harmony的虛擬機,就是個完全符合JVM標準的虛擬機. Android用了Harmony的類庫,但是Android 的VM,和JVM標準完全不搭界.”
齊天也看到了這場爭吵,對我說,對方是個上了邪路的人,與他爭論有和意義?
參考:
1.wikipedia中對Dalvik的描述:
Dalvik is the process virtual machine (VM) in Google's Android operating system, which, specifically, executes applications written for Android.
- 前言
- IT癡漢的工作現狀
- IT癡漢的工作現狀2-女人
- IT癡漢的工作現狀3-臨時工
- IT癡漢的工作現狀4-溝通與分享
- IT癡漢的工作現狀5- 一分鐘的工作
- IT癡漢的工作現狀6-寂寞的夜
- IT癡漢的工作現狀7-TB
- IT癡漢的工作現狀8-三思而后行
- IT癡漢的工作現狀9-會哭的孩子有奶吃
- IT癡漢的工作現狀10-Sprint Planning
- IT癡漢的工作現狀11-程序員的煩惱
- IT癡漢的工作現狀12-葉志堅離職了
- IT癡漢的工作現狀13-恐嚇電話
- IT癡漢的工作現狀14-段子
- IT癡漢的工作現狀15-低級錯誤
- IT癡漢的工作現狀16-職業發展
- IT癡漢的工作現狀17-健康警鐘
- IT癡漢的工作現狀18-思維定式
- IT癡漢的工作現狀19-公司組織結構
- IT癡漢的工作現狀20-職業規劃
- IT癡漢的工作現狀21-Android開發前景論
- IT癡漢的工作現狀22-由Dalvik虛擬機引發的口水戰
- IT癡漢的工作現狀23-鄉關何處
- IT癡漢的工作現狀24-Just for fun
- IT癡漢的工作現狀25-技術之養成
- IT癡漢的工作現狀26-好項目,壞項目
- IT癡漢的工作現狀27-高冷MM與奶茶姑娘
- IT癡漢的工作現狀28-刀客許三爺(上)
- IT癡漢的工作現狀29-社會工程學
- IT癡漢的工作現狀30-刀客許三爺(下)
- IT癡漢的工作現狀31-跳槽小貼士
- IT癡漢的工作現狀32-四次面試
- IT癡漢的工作現狀33-HTML5的春天是原生App的冬天?
- IT癡漢的工作現狀34-技術選型
- IT癡漢的工作現狀35-不要讓你擅長的技術限制了你
- IT癡漢的工作現狀36-做好準備再上路
- IT癡漢的工作現狀37-我想找一個人
- IT癡漢的工作現狀38-讓我的筆記本上網沖浪--無線路由的橋接技術
- IT癡漢的工作現狀39-客戶demo這件小事
- IT癡漢的工作現狀40-將其存成pdf,永久保存
- IT癡漢的工作現狀41-親歷招投標
- IT癡漢的工作現狀42-Android越用越慢?立場不同,談何信任!
- IT癡漢的工作現狀43-開發者宣言