zoukankan      html  css  js  c++  java
  • 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之软引用、弱引用和虚引用

  • 相关阅读:
    【微信小程序】自定义模态框实例
    编程微刊第四期文章汇总(2018.4)
    ajax实现简单的点击左侧菜单,右侧加载不同网页
    JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
    bootstrap+fileinput插件实现可预览上传照片功能
    css实现悬浮效果的阴影
    推荐一款优雅高效的免费在线APP原型工具
    前端工程师提高工作效率的几个小技巧
    程序员常用的六大技术博客类
    程序媛,坚持这几个好习惯让你越来越美
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3026949.html
Copyright © 2011-2022 走看看