ART揭秘
文章平均质量分 85
漂流的代码
这个作者很懒,什么都没留下…
展开
-
序言
屈指算来,在软件开发这个行业工作也有10个年头了,可惜没有积累下什么东西。因为工作关系,对Android的ART进行了深入研究。我对ART工作的机制和原理产生了兴趣,有一种想把它搞清楚的冲动。ART可以说是一个杰作!它融合了虚拟机、编译器、GC等各方面的知识和原理,具有很高的学习价值。对于一个希望提高自己的层次的开发人员,学习ART恐怕是最好的方法了。也是基于这个想法,我想把我对A原创 2015-01-22 14:23:35 · 1289 阅读 · 2 评论 -
ART虚拟机参数说明
propertyJVM参数含义取值备注dalvik.vm.checkjni || ro.kernel.android.checkjni取true|false-Xcheck:jni当调用jni函数时,打开jni检查 -Xjnigreflimit:设置JNI全局引用的最大数量整数,如2000原创 2016-06-15 18:42:07 · 6881 阅读 · 3 评论 -
dalvik VM的解释器分析
以KK的dalvik源码为基础来解析。使用的源码基于https://github.com/AOKP/dalvik, 可以从https://github.com/AOKP/dalvik/archive/kitkat.zip 下载。我是在linux下,使用vim + ctags做分析的。由于ARM架构是使用最多也是最频繁的架构,所以我分析的重点是ARM的汇编如何实现解释器的。所以我在分原创 2016-07-25 17:29:39 · 3957 阅读 · 0 评论 -
通过dexdump来学习DEX文件格式
一、dexdump简介dexdump是android提供的一个dex文件查看工具,在4.4之前的版本上,我们可以在dalvik的dexdump目录找到源码。这个工具简单而且全面。通过学习这个工具的源码,我们可以很快的对dex文件有一个全面的了解。 首先看下dexdump的命令行参数: dexdump: [-c] [-d] [-f] [-h] [-i] [-l layout] [-m] [-t原创 2016-06-16 16:27:54 · 15809 阅读 · 3 评论 -
DVM GC源码研究
基于KK的代码。本文主要是介绍dalvik GC的一些概况。DalvikGC概要Davik GC的主要对象GCHeap : 管理GC内存的对象,全局只有一个,负责GC的分配和回收HeapSource: 管理Heap的对象。在GC初始化时,分配一段连续的地址空间(maximumSize), 负责管理Heap的增长Heap: 为分配准备的连续空间。HeapSource包含两个Hea原创 2016-07-08 18:58:14 · 2152 阅读 · 0 评论 -
G1 算法论文
GC相关术语 Compaction – The garbage collection phase that defragments the heap, moves objects in memory, remaps all affected references and frees contiguous memory regions. Concurrent – A type of g原创 2016-07-20 00:14:53 · 1922 阅读 · 0 评论 -
DALVIK JIT 入口分析
dvmCompileTrace函数如何进入到JIT模式?如何获取需要JIT的代码?jit出的代码放在哪里?jit出代码与bytecode的对应关系是什么?dvmCompileTrace过程分析BasicBlockMIRLIRAssemble寄存器分配规则是什么?原创 2016-08-18 14:01:49 · 2609 阅读 · 0 评论 -
DAVLIK JIT编译实现 (上)
为什么要讲dalvik jit的编译实现呢?首先,为什么是dalvik?虽然dalvik已经在L版本后不再出现在Android系统中,但是ART是从dalvik继承而来,ART中有很多Dalvik的痕迹。在很多方面,ART都继承了dalvik的思想,如果不深入了解dalvik,对ART的了解也是不全面的。另外,dalvik相对与ART,逻辑结构更加简单和清晰,很多方面都可以看作ART的雏形和蓝本,原创 2016-08-25 11:00:37 · 2286 阅读 · 0 评论 -
ART深入浅出1--虚拟机的启动和初始化
本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 : 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。启动虚拟机我们知道,Android的应用程序和服务都是由zygote进程产生的。zygote进程负责创建一个java虚拟机环境,并调用zygote的java入口。zy原创 2017-07-04 19:58:31 · 2491 阅读 · 0 评论 -
ART深入浅出2 -- 认识和了解Runtime Options
本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 android工程的路径>: 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。原创 2017-07-14 20:51:56 · 2299 阅读 · 1 评论 -
ART深入浅出5--了解Dex文件格式(2)
本节介绍ClassDef的格式。ClassDef是Dex文件内部表示一个类的结构。包含了类的基本数据,如类的名称,访问级别,Field列表,Method列表等信息。原创 2017-08-22 08:36:20 · 1551 阅读 · 0 评论 -
ART是怎么实现参数传递的?
在Java世界,有两类函数:普通的函数和native函数。Native函数是由C/C++或者汇编语言实现的函数。那么,函数之间的调用就有:普通->普通,native->普通,普通->native。这三种类型的调用,可以发生在任意时间、任意地点,以任意方式来调用。那么,这三种调用方式必然存在很大的共同点。如果我们能够破解一种的话,那么其余两种也就能够很轻易的破解了。那么,选哪一种原创 2015-01-22 14:24:59 · 3622 阅读 · 1 评论 -
ART如何实现Exception.printStackTrace
大家都很熟悉Exception.printStackTrace,而且也非常的常用。不过,各位有没有想过应该如何实现呢?想象一下,当我们调试一个C/C++程序的时候,我们也能看到函数的调用堆栈,一定会想,这究竟是怎么做到呢?因为ART运行的也是机器码,那么它们也一定有共同的地方吧。当然,我们并不是真正的去了解一个C/C++程序是如何实现调试的,我们只是借鉴一下它的原理。以原创 2015-01-24 12:19:53 · 1537 阅读 · 0 评论 -
匿名类和final外部变量的实现
匿名类和final外部变量的实现原创 2016-05-10 10:27:28 · 2014 阅读 · 0 评论 -
dalvik字节码问答
什么是字节码?字节码的长度怎么计算?字节码的格式是什么?const类指令有那些?和类、对象操作相关的指令有哪些?switch相关指令是怎么回事?Array数据操作指令有那些?quick类型的指令有那些,起到什么作用?execute-inline指令是怎么回事?原创 2016-05-10 19:52:18 · 3887 阅读 · 0 评论 -
ART深入浅出(7) - OAT文件的格式
本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 : 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。从本章开始,我将介绍OAT文件的格式以ELF文件格式作为外壳从手机上下载一个oat文件。一般我都是研究boot.oat。比如,用命令 adb pull /data/da原创 2017-10-10 11:10:51 · 3769 阅读 · 0 评论