Android高级第九讲--JVM 与Android Dalvik之间的异同
博客出自:http://blog.csdn.net/liuxian13183,轉載注明出處! All Rights Reserved !?
有些東西不是不知道,是還沒用到,所以才沒去仔細了解,昨天被問及這兩者之間的區別,回去研究了下,寫篇博客,大家相互探討一下。
剛開始學Java的時候,我們就學了JVM ,了解了它的工作原理,說到JVM,那就得說說Java的開發環境,jdk
jdk由三部分組成java language,java tools和jre 。
java language很好理解,就是java開發語言
java tools 是由常見的java,javac,javadoc,apt,jar,javap,jpda,jconsole,rmi,javaVisualVM,javaTI等工具組成
jre即java runtime environment,java運行環境,包括Deployment Technologies, User Interface Toolkits,Intergration Libraries,Other Base Libraries,Lang and Util Base Libraries,Java Virtual Machine,
Deployment Technologies又包含了Deployment,Java Web start,Java Plugin-in這些功能
User Interface Toolkits又包含了AWT,Swing,Java2D,Image IO ,Print Service,Sound等工具類
Intergration Libraries又包含了JDBC,JNDI等工具類
Other Base Libraries又包含了Beans,Input/Output,JNI,Math,NetWorking,Sercurity,Seriazation等工具類
Lang and Util Base Libraries又包含了Collections,Jar,Logging,Management,Versioning,Instrumentation,Zip等
Java Virtual Machine又包含了Java HostPotClient VM,Java HostPotServer VM兩種通信虛擬工具
JVM是java程序運行的基礎,是維持平臺運轉的管理者。
JVM為變量、對象、方法分配內存,變量和方法放棧(臨時儲存)里,對象放堆(持久數據)里面
基本回收算法
引用計數:比較古老的回收算法。原理是此對象有一個引用,即增加一個計數,刪除一個引用則減少一個計數。垃圾回收時,只用收集計數為0的對象。此算法最致命的是無法處理循環引用的問題。
標記-清除:此算法執行分兩階段。第一階段從引用根節點開始標記所有被引用的對象,第二階段遍歷整個堆,把未標記的對象清除。此算法需要暫停整個應用,同時,會產生內存碎片。
復制:此算法把內存空間劃為兩個相等的區域,每次只使用其中一個區域。垃圾回收時,遍歷當前使用區域,把正在使用中的對象復制到另外一個區域中。次算法每次只處理正在使用中的對象,因此復制成本比較小,同時復制過去以后還能進行相應的內存整理,不過出現“碎片”問題。當然,此算法的缺點也是很明顯的,就是需要兩倍內存空間。
標記-整理:此算法結合了“標記-清除”和“復制”兩個算法的優點。也是分兩階段,第一階段從根節點開始標記所有被引用對象,第二階段遍歷整個堆,把清除未標記對象并且把存活對象“壓縮”到堆的其中一塊,按順序排放。此算法避免了“標記-清除”的碎片問題,同時也避免了“復制”算法的空間問題。
增量收集:實施垃圾回收算法,即:在應用進行的同時進行垃圾回收。
分代:基于對對象生命周期分析后得出的垃圾回收算法。把對象分為年青代、年老代、持久代,對不同生命周期的對象使用不同的算法(上述方式中的一個)進行回收。現在的垃圾回收器(從J2SE1.2開始)都是使用此算法的。
JVM是通過jdk中Java.exe來完成,通過下面4步來完成JVM環境.?
1.創建JVM裝載環境和配置?
2.裝載JVM.dll?
3.初始化JVM.dll并掛界到JNIENV(JNI調用接口)實例?
4.調用JNIEnv實例裝載并處理class類。
總之從應用的層面上來講主要有三種回收方式,
詳見:Android高級開發第八講--粗略講述Java之軟引用、弱引用和虛引用
?
Android平臺的虛擬機是Dalivk,與JVM相比較,它是基于寄存器的,支持提前優化,編譯花費時間更短,允許多個虛擬機實例共存,分做不同的linux進程,可以防止一個崩潰,其他程序跟著不能使用。
其次它執行的是.dex字節碼,JVM執行的是.class字節碼
今天先講到這里,以后再遇到再詳細說明。
總之從應用的層面上來講主要有三種回收方式,
詳見:Android高級開發第八講--粗略講述Java之軟引用、弱引用和虛引用
?
總結
以上是生活随笔為你收集整理的Android高级第九讲--JVM 与Android Dalvik之间的异同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCNA综合实验配置
- 下一篇: 在SQL2005/SQL2008中CTE