首页 > Android高级第九讲--JVM 与Android Dalvik之间的异同

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之软引用、弱引用和虚引用

 

更多相关:

  • binary search 二分查找 half-interval search  折半查找 logarithmic search  对数搜索 sentinel 哨兵 pivot 基准数 median 中位数,中值 partition 分割 percolate 过滤 sentinel 哨兵 linear time 线性时间...

  • 《数据结构与算法分析 C语言描述》Mark Allen Weiss著,冯舜玺译,机械工业出版社。Weiss教授的经典教材三部曲之一,其中的C语言描述版本,也就是本书,被称为20世纪最重要的30本计算机教材之一。Mark Allen Weiss,1987年在普林斯顿大学获得计算机科学博士学位,师从著名算法大师Robert Sedgew...

  • 实现12种不同的算法来跟踪视频和网络摄像头中的对象! 你会学到: 使用Python和OpenCV跟踪视频和网络摄像头中的对象 理解跟踪算法的基本直觉 实现12种跟踪算法 了解对象检测和对象跟踪之间的区别 要求 程序设计逻辑 基本Python编程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2...

  • 文章目录1. 算法背景2. BM(Boyer-Moore)算法2.1 坏字符规则(bad character rule)2.2 好后缀规则(good suffix shift)2.3 复杂度及完整代码3. KMP(Knuth Morris Pratt)算法3.1 好前缀 和 坏字符规则3.2 高效构建 失效函数3.3 复杂度及完整代码...

  • 文章目录前言CAP理论C consistency 一致性A availability 可用性P partition tolerance 分区容错性一致性模型弱一致性强一致性强一致性算法需要明确的问题强一致算法: 主从同步强一致性算法:多数派强一致算法:PaxosBasic PaxosMulti Paxos第一个版本:使用Propose...

  • 点云PCL免费知识星球,点云论文速读。文章:DSP-SLAM: Object Oriented SLAM with Deep Shape Priors作者:Jingwen Wang Martin Runz Lourdes Agapito编译:点云PCL代码:https://github.com/JingwenWang95/DSP-S...

  • RAM缓存 新RAM缓存算法(CLFUS) 新的RAM缓存使用的创意来自许多缓存替换策略和算法,包括LRU,LFU,CLOCK,GDFS及2Q,它被命名为时钟周期内最小频繁使用大小算法CLFUS(Clocked Least Frequently Used by Size)。它避开了任何专利算法,具有如下特性: 均衡最近性(Rec...

  • MP4 |视频:AVC,1280×720 30 fps |音频:AAC,48 KHz,2 Ch |时长:2h 12m 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:560M C4D是一个有抱负的运动图形艺术家和设计师的重要工具。借助C4D,您可以使用3D对象、动态效果和动画来增强运动图形、模型和可视化效果。本课...

  • 文章目录先说问题:再说解决尝试1:尝试2(该尝试建议先在自己环境搭配对应业务测试通过后再现场尝试): 感谢 学无止境996同学的陪伴和vigourtyy美丽女友的支持,直到这个解决问题的深夜 先说问题: ceph 12.2.1生产环境:3副本 tier + 3副本data 机房在拥有业务的情况下重启集群交换机,产生如下场景...

  • 这周主要学习了java中的类和对象的知识点,发现和C++中的类和对象极为相似,对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下(如类的三大特征:继承,封装和多态,构造,成员对象的访问权限,构造,无参有参函数的调用等),同时也了解到一些新的概念,比如类对象创建和引用占据堆内存和栈内存,输出对象时默认调...

  •  ★ 相同点:     1. 都是地址的概念;     指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。     ★ 区别:     1. 指针是一个实体,而引用仅是个别名;     2. 引用使用时无需解引用(*),指针需要解引用;     3. 引用只能在定义时被初始化一次,之后不可变;指针可变�...

  • 在C++中,&既有引用又有取地址,其实他们的区别可以用一句话概括:=号左边是引用,=号右边是取址。 比如   int a=3;     int &b=a;//引用;                                                    int *p=&a; //取地址 引用b,它是变量a的引用,即别...