http://blog.csdn.net/roland_sun/article/details/46877563 原文如下: 在Android系统中,所有的类定义以及具体的代码都是包含在DEX文件中的.但是,一个功能丰富的程序往往都比较复杂,由很多类组成. 而每一个类,都由一个所谓类描述符(Class Descriptor)的字符串来唯一标识,两个类不可能有同一个类描述符.类描述符不仅包含类名,还包含了类所在的包名.例如,如果你的类所在包名是“com.trendmicro.mars”,且类名是“…
一.对象的内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分: Mark Word(标记字段):对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等. Klass Pointer(Class对象指针):Class对象指针的大小也是4个字节,其指向的位置是对象对应的C…
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 本文是Android虚拟机系列文章的第三篇,专门介绍Andorid系统上曾经使用过的Dalvik虚拟机. 也许有人会问,既然Dalvik虚拟机都已经被废弃了,为什么我们还要了解它呢?出于下面的原因,让我觉得还是有必要了解一下Dalvik虚拟机的: Dalvik留下的很多机制在现在的Android系统是一样适用的,例如Dalvik指令,dex文件 并非每个人都是在最新版本的And…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8923483 在前面一文中,我们分析了Dalvik虚拟机的运行过程.从中可以知道,Dalvik虚拟机在调用一个成员函数的时候,如果发现该成员函数是一个 JNI方法,那么就会直接跳到它的地址去执行.也就是说,JNI方法是直接在本地操作系统上执行的,而不是由Dalvik虚拟机解释器执行.由此也可看 出,JNI方法是Android应用程序与本地操作系统…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8885792 在Android系统中,应用程序进程都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的.Zygote进程在启动时会创建一 个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序 进程都有一个独立的Dalvik虚拟机实例.…
在Android系统中,应用程序进程都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的.Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的Dalvik虚拟机实例.在本文中,我们就分析Dalvik虚拟机在Zygote进程中的启动过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Zygot…
前面我们分析了Dalvik虚拟机堆的创建过程,以及Java对象在堆上的分配过程. 这些知识都是理解Dalvik虚拟机垃圾收集过程的基础.垃圾收集是一个复杂的过程,它要将那些不再被引用的对象进行回收.一方面要求Dalvik虚拟机能够标记出哪些对象是不再被引用的.还有一方面要求Dalvik虚拟机尽快地回收内存,避免应用程序长时间停顿.本文就将详细分析Dalvik虚拟机是怎样解决上述问题完毕垃圾收集过程的. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! <An…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是运行在Dalvik虚拟机里面的,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例.除了指令集和类文件格 式不同,Dalvik虚拟机与Java虚拟机共享有差不多的特性,例如,它们都是解释执行,并且支持即时编译(JIT).垃圾收集(GC).Java本地 方法调用(JNI)和Java远程调试协议(…
Dalvik调用一个成员函数时,虚拟机,假设发现,该成员函数是一个JNI办法,然后,它会直接跳转到其地址来运行.也就是说.JNI方法是直接在本地操作系统上运行的.而不是由Dalvik虚拟机解释器运行. 由此也可看出,JNI方法是Android应用程序与本地操作系统直接进行通信的一个手段. Dalvik虚拟机除了能够运行Java代码之外,还能够运行Native代码,也就是C/C++函数.这些C/C++函数在运行的过程中,又能够通过本地操作系统提供的系统调用来创建本地操作系统进程或者线程,也就是Li…
在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大小,那么必须需要知道对象在虚拟机中的结构是怎样的,来看看Hotsopt中对象在内存中的结构: 在上面这张图里面可以看出,对象在内存中的机构主要包含以下几个部分: Mark Word:对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级的标记位,偏向锁标记位等等. Class对象…