art
然木道长
文辞不必华丽,道明问题即好
展开
-
art虚拟机--方法成员类的关系
一、三个对象的主要成员函数 1、object类,是抽象于art::mirror空间中。保证其结构的数据内存。包括类中所有的成员,field也 是offset的方式,存在于该内存空间中 2、artField关键的成员,declaring_class_表示是当前属于那个类。access_flags_表示当前的成员是public/private等 field_dex_idx_是在dex文件中的索引。offset_ 是在class结构体中的偏移 SetObj/GetObj最终...原创 2020-11-04 11:48:58 · 196 阅读 · 0 评论 -
Art虚拟机--内置类
一、 抽象的位置在art/mirror文件夹内。mirror意思是这个java类的一个c++镜像 1、Object是基类 2、感觉都是画画图,看看源码就明白了原创 2020-10-30 10:53:36 · 137 阅读 · 0 评论 -
art虚拟机内存--java对象申请的内部逻辑
一、对象如何New的 1、对于对象类型,申请内存,返回mirror::Object 2、对于数组,申请内存,返回mirror::Array 3、最终代码里面的new函数,会让heap去申请内存原创 2020-10-23 17:48:52 · 167 阅读 · 0 评论 -
Art虚拟机内存抽象--heap中的空间及主要方法
一、heap heap类是art虚拟机中内存管理的主要部分之一。主要管理堆内存,之前所说的各种space,在这里被使用。被聚集在一起,提供内存管理的功能 如上图所示,heap中直接有13个跟space有关的引用。其中前三个是一个Vector集合,内部包含更多的space,这里面就是对象的生成位置 二、Heap分配对象的主要方法 1、TryToAllocate是分配内存空间的最终实现位置,根据不同的AllocatorType,会去不同的space上面申请内存 如下代码,就是从n...原创 2020-10-23 15:46:15 · 487 阅读 · 0 评论 -
Art虚拟机内存抽象(2)--LargeObjectSpace
Large Object Space 一、基本定义 1、live_bitmap_ 与 mark_bitmap_ 是用于垃圾收集标记的 2、LargeObjectSpace分为两种,LargeObjectMapSpace与FreeListSpace mapSpace这一种,内存不是连续的 FreeListSpace这一种,内存是连续的 3、看好mirror::Object *Alloc 接口,该接口就是用于内存分配对象的 4、分配的对象,还是存...原创 2020-10-19 10:38:11 · 424 阅读 · 0 评论 -
Art 虚拟机内存抽象(1)
一、内存管理 一个很重要的问题,就是内存是如何进行分配的。如何申请的,如何释放的。 针对于不同的场景,内存是如何分类的。以及,这些分类是对系统产生便利性的。 二、space抽象 1、space实现了设置名字,以及设置回收策略的功能 2、ContinuousSpace begin_ 开始地址,end_结束地址 2、DiscontinuousSpace 的核心在于LargeObjectBitmap上面 3、ContinuousMemMapAllocSpace ...原创 2020-10-16 15:01:16 · 311 阅读 · 0 评论 -
ART虚拟机中的同步抽象
art虚拟机中的同步抽象 最近,准备做一个关于解析art虚拟机的解读。算是给自己一个记录 一、同步抽象架构 一图胜千言 二、解析 1、art虚拟机的实现,离不开互斥体,同步的因素。因为是多线程系统吗。像这样的同步机制,在linux操作系统中,就是各种个样的锁,原子体等。在java中就是sync关键字等等。 2、BaseMutex是art虚拟机同步机制的一个起点,其底层的实现是linux的futex机制。这个机制的效率相对比较高。 3、mutex,读写m...原创 2020-10-09 15:37:16 · 262 阅读 · 1 评论