ART对象内存分配过程解析(上)——内存分配的准备阶段(Android 8.1)
注:本文基于Android 8.1进行分析。
ART对象分配过程解析——内存分配的准备阶段
本章我们将分析Android 8.1中ART虚拟机的对象创建时内存分配过程的分析。本节将介绍内存分配相关的环境准备及各种跳转逻辑。
我们首先从Thread类开始分析。
Thread类
Thread类的Init()方法会进行线程相关的所有初始化工作,例如,初始化Cpu信息,成员函数InitTlsEntryPoints初始化一个外部库函数调用跳转表。例如,Thread类将外部库函数调用跳转表划分为4个,其中,interpreter_entrypoints_描述的是解释器要用到的跳转表,jni_entrypoints_描述的是JNI调用相关的跳转表,portable_entrypoints_描述的是Portable后端生成的本地机器指令要用到的跳转表,而quick_entrypoints_描述的是Quick后端生成的本地机器指令要用到的跳转表。这些函数跳转入口通过访问线程Thread对应的偏移量进入。
Thread的Init方法:
bool Thread::Init(ThreadList* thread_list, JavaVMExt* java_vm, JNIEnvExt* jni_env_ext) {// This function does all the initialization that must be run by the native thread it applies to.// (When we create a new thread from managed code, we allocate the Thread* in Thread::Create so// we can handshake with the corresponding native thread wh
ART对象内存分配过程解析(上)——内存分配的准备阶段(Android 8.1)相关推荐
- 【androidx86 5.1.1】Android HttpClient请求过程解析(上)
Android HttpClient请求过程解析 前言:很久没有写源码解析相关的文章了,所谓"三天不写,上房揭瓦",这都仨月啦!前段时间忙着发版,经理有别的事情忙,就把管理发版的事 ...
- saber软件安装后怎么打开_关于 saber 仿真软件基本应用和案例的详细过程解析(上)...
* 本文是 21Dianyuan 社区「第八期 DIY 实战经验 • 原创技术分享赛」原创参赛作品,作者奋斗的牛头怪,感谢作者的辛苦付出. 自从接触仿真以后,发现仿真软件这个工具确确实实能对工程师的设 ...
- JVM成神路对象内存布局、分配过程、从生至死历程、强弱软件引用
引言 对象实例的角度,阐述一个Java对象从生到死的历程.Java对象在内存中的布局以及对象引用类型. 一.Java对象在内存中的布局 Java源代码中,使用new关键字创建出的对象实例,我们都知道在 ...
- (五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析
引言 在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内.而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程.J ...
- java创建对象时分配内存方式,是堆上分配还是栈上分配?
创建对象的内存是分配在堆上还是栈上面?大部分童鞋的回答是这样的:"肯定分配在堆内存的嘛,栈内存是属于子线程和基本数据类型专用的内存空间,怎么会分配到栈上面呢?",这个回答嘛,也对, ...
- G1垃圾收集器之对象分配过程
本文来说下G1垃圾收集器之对象分配过程 文章目录 概述 小对象 大对象 本文小结 概述 G1的年轻代由eden region 和 survivor region 两部分组成,新建的对象(除了巨型对象) ...
- 启动期间的内存管理之初始化过程概述----Linux内存管理(九)
转载地址:https://blog.csdn.net/gatieme/article/details/52403148 日期 内核版本 架构 作者 GitHub CSDN 2016-09-01 Lin ...
- Android Dalvik、ART及APK编译过程
强烈建议看罗升阳大神的文章,五年过去,回头看,真的还是经典啊,不要认为几年前的文章没有价值,看一看就知道 妙啊: https://blog.csdn.net/Luoshengyang/article/ ...
- java什么是对象如何创建对象_java对象的创建过程是什么
java对象的创建过程: 类加载检查-->分配内存-->初始化零值-->设置对象头-->执行init方法 具体如下: 1.类加载检查 虚拟机遇到一条new指令时,先检查这个指令 ...
最新文章
- 四十三、文件存储空间管理
- 安卓开发笔记(二十七):实现轮播文字消息
- UA MATH567 高维统计 专题0 为什么需要高维统计理论?——协方差估计的高维效应与Marcenko-Pastur规则
- 一文回顾阿里云弹性计算云栖大会精彩看点
- vs2008界面查看
- spring之二——使用maven创建一个java project
- [渝粤教育] 西南科技大学 经济法概论 在线考试复习资料2021版(3)
- 小程序 - swiper除了左右切换还有上下滚动超出屏幕的内容
- php中mimes函数,wordpress函数check_upload_mimes()用法示例
- java中criteria类_java – Criteria API:按类类型过滤
- LeetCode(620)——有趣的电影(MySQL)
- 求求了!让 Python 的热搜消失吧!!
- 【愚公系列】2022年10月 微信小程序-电商项目-收货地址功能实现
- 基于MATLAB的AM信号调制解调代码,代码)基于MATLAB的AM调制解调系统仿真报告
- [STL]priority_queue多种方式自定义排序
- SAP中一次性客户及供应商的应用浅晰
- mysql中column的用法_关于MySQL的一些用法
- D. Three Religions
- SSHD服务的搭建与管理
- 服务器c盘怎么删除临时文件,删除临时文件夹中临时文件的方法