dalvik虚拟机与Java区别_05 Android---java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)...
大家好,我是森森
這節課我簡單給大家介紹一下java虛擬機跟安卓系統虛擬機的區別.可能時間太晚了,有點不在狀態,也有點緊張,大家見諒.
05java虛擬機跟dalvik虛擬機的區別
這篇文章重點寫一寫安卓運行時和Java運行時的區別.
什么是運行時呢?其實我們所說的虛擬機就是運行時.
兩種虛擬機有什么不同呢?
先說Java虛擬機,它的工作流程是這樣的,首先編寫一個Java代碼,然后用Javac這個指令,把它編譯成.class文件的字節碼文件,我們想要運行這個字節碼文件,必須要把它放到虛擬機里(
JVM)去裝載執行.
安卓呢,它也有自己的虛擬機,叫dalvik virtual machine,我們平時都叫它dalvik虛擬機.
dalvik虛擬機的編譯過程要比JVM多了一個步驟,那就是Java的字節碼文件還要經過進一步處理,經過dex compiler,也就是dex編譯器,把它轉成dalvik byte code,dalvik類型的字節碼,然后再放到dalvik虛擬機里運行,那這個過程到底做了什么操作呢?
大家也看了視頻里的實驗,就是同樣的大小,整個文件要比多個文件的文件夾拷貝的要快.
同樣的道理,在Java虛擬機要執行代碼的時候,它要把所有的class字節碼文件給裝載進虛擬機里,假設,你寫的這個應用有一百個Java代碼,就會生成一百個.class的字節碼文件,它把這些字節碼文件一個個裝載進來,然后去找到字節碼,再去解析運行,它比較慢,
而dalvik虛擬機,它所有的代碼,只會生成一個dex文件,這個dex文件直接裝載到dalvik虛擬機就可以解析執行了,運行效率會比較高.
另外,dalvik虛擬機還會對字節碼文件做很多優化操作,普通的Java虛擬機,每個class文件都有一個header,這個頭包含著編譯器的版本,運行的jvm版本等信息,每個class文件都一個頭,就比較浪費存儲空間,
而dalvik虛擬機是把所有class文件的頭都給抽取出來,只生成一個公共的頭,另外,像一般我們寫代碼的時候會有一些靜態變量,比如說,你定義了一個public static final int i=1;它事實上是一個全局的靜態的成員變量,這個值是不會發生修改的,如果很多代碼有這樣的定義,
dalvik虛擬機就把這樣的一些常量給抽取出來,有字符串的常量池,類型定義的常量池,字段的常量池,方法的常量池,所以,dalvik虛擬機更適合移動平臺,它的效率更高,運行速度也更快.
另外呢,谷歌開發dalvik虛擬機還有一個原因,就是Java虛擬機版權問題,不是它自己的東西,用了得掏錢.視頻中故事已經講得很細,不再贅述.
本人QQ號,525902456,如有錯誤,歡迎指出,希望能交到更多朋友,交流技術.
免費贈送安卓教程
總結
以上是生活随笔為你收集整理的dalvik虚拟机与Java区别_05 Android---java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome调试
- 下一篇: android 平板方案,Android