华为方舟编译器理解:初探
华为踩着2019年8月的尾巴开源了方舟编译器:
github:https://github.com/Himself65/OpenArkCompiler
背景:
方舟编译器主要要做的事情:
1.将多语言之间联合优化,比如c/c++、 java包括前端等,然后自己设计一个IR,不同的前端分析完后,然后转为统一的IR,这个是编译原理上常做的事;
具体可见对于mapleIR的说明:
https://github.com/Himself65/OpenArkCompiler/blob/master/doc/MapleIRDesign.md
2.由于目前形成了一个以移动端手机为中心的智能中心,但是不能满足目前Android7.0以后以上的AOT+JIT的联合编译解释的模式,说到底感觉无论是启动什么的还是慢。
方舟编译器把所有的Android系统上的框架全部编译为native层。减少java与C++ 之间的JNI调用开销。然后这个事交给开发者在编译的时候处理。
3.打造成自己的一个生态环,你要想用这个方舟编译器带来好的用户体验就得用我华为自己的runtime;要不然自己开发代价高。
4.同时对于jdk中内存回收机制,最常见的RC机制,需要进一步的优化;
代码解读:后面会慢慢更新吧,毕竟水平有限,(逃:
略
先放几张官方的图片,比较浅显易懂。
一、方舟编译器的编译:
参照官方文档:
https://gitee.com/harmonyos/OpenArkCompiler/blob/master/doc/Development_Preparation.md
计得给Ninja(v1.9.0)和NG对应的权限就可以了。
看到上面就编译成功了。
二、使用FZ编译HelloWorld:
第一步:
调用javac处理java文件为.class文件;
第二步:
调用jbc2mpl处理.jar文件为xx.maple文件,即方舟编译器的中间文件;
第三步:
调用maple对中间文件进行优化;
第四步:
前端执行完以后就调用mplcg对于中间文件生成后端文件;
以上就编译通过了,
三、过程分析:
1.首先对HelloWorld.class进行反汇编
2. 观察HelloWorld.mpl文件
可以看到#UBSTIDX对应的是上面java字节码反汇编以后的可读文件形式:
下面是方舟编译器对于这些字节码方法的翻译:
3.接着我们继续看一下HelloWorld.VatbleImpl.mpl文件
可以看到的是在上面的基础上进行优化增加了对于引用的管理:
MCCIncRef:类似于dvmAddToReferenceTable,加入引用表
MCCDecRef:类似于dvmRemoveFromReferenceTable,从引用表中移除
以及MPL_CLEANUP_LOCALREFVARS,清除引用表。
同样的去看HelloWorld.VtableImpl.s文件,可以清晰的看到对于RC机制管理的相关函数的调用。
四、LLVM对java文件进行编译处理为IR:
同样的文件使用LLVM对java文件进行处理为LLVM-IR可以看到:与上面方舟编译器处理的结果有异曲同工之妙。
但是从整体的形式上来看,LLVM-IR的可读性更强一点。
华为方舟编译器理解:初探相关推荐
- 华为的Java虚拟机_华为方舟编译器解析:提升安卓运行效率
在今年发布P30的时候,华为还发布了一个名为"方舟"的编译器,但是很多人对方舟到底是什么其实有误解,这里我们就来详细说说.可以肯定的是,方舟并不是单独操作系统!而是安卓上的工具. ...
- 华为方舟编译器是黑科技?
在4月份,华为P30系列发布会上,华为消费者终端业务CEO余承东除了给消费者带来了万众期待的华为P30 Pro,还公布了一个全新的黑科技:华为方舟编译器.该编译器可以改善安卓应用编译效率,从原先的边解 ...
- 万字长文详解华为方舟编译器的荣光和使命
本文由MO编辑部出品,文字超1万,查阅的资料多达上百万文字,并且与华为方舟编译器的专家做过深度访谈.其不仅解析了华为在编译器和手机系统方面做的多年准备,也向读者展现了波澜壮阔的软件产业发展史. 201 ...
- xposed插件加固保护方案以及对华为方舟编译器的思考
目前市面上各家加固厂商在对普通App的加固上已经做得比较成熟稳定,而且强度也很高了.但是似乎没有一个针对xposed插件加固的方案,笔者在试用了几家加固后,均会导致xposed插件的崩溃,要么就是插件 ...
- 关于华为方舟编译器,你想知道的都在这里!
原文链接地址: 关于华为方舟编译器,你想知道的都在这里! - 华为终端的文章 - 知乎 https://zhuanlan.zhihu.com/p/77108133 2017年5月的一个凌晨,华为某实验 ...
- 【IT资讯】华为方舟编译器编译工具正式发布和工具下载
01. 概述 2019华为全球开发者大会将在8月9日-11日在华为松山湖基地召开.本次开发者大会邀请了1500位合作伙伴.5000名全球开发者,将是华为历来规模最大的一次会议.在这次大会上,华为方舟编 ...
- 华为方舟编译器开源官网正式上线
[摘要] 8月31日,华为方舟编译器开源官网正式上线. 本次方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch6 ...
- 华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破
在华为春季发布盛典上,除了"HUAWEI P30"还有一个词也火了一把,那就是全新黑科技--"华为方舟编译器"! 先花一分钟,戳视频链接简单了解下 方舟编译器虽 ...
- 华为方舟编译器正式上线 已经拥有45家合作伙伴
在前不久刚结束的华为开发者大会上,华为公布了方舟编译器的开源时间,8月31日,华为方舟编译器开源官网正式上线. 根据官网上的介绍显示,华为方舟编译器的优势主要有四个. 1.多语言联合 方舟编译器将同一 ...
最新文章
- java foreach order_Java 8流中的forEach vs forEachOrdered
- C#/.Net判断是否为周末/节假日
- windows 下使用composer
- Visual Studio 2019设置回车代码补全
- 数据访问函数库 for ado.net2.0
- 基本数据类型和包装类型
- grep、sed命令使用记录
- Cisco3550三层交换机vlan间路由配置实例
- 假设检验 python_数据清洗、假设检验
- 印第安纳大学计算机与信息学院,印第安纳大学伯明顿分校管理信息系统(MIS)专业详解...
- input 搜索localStorage存储历史记录 删除历史记录
- 八位硕博大佬的百度之旅~
- char ch= 中 什么意思java_问一下java里的char到底是什么
- 不要再叫自己“程序员”了!
- 连接服务器显示凭据,连接云服务器时的凭据是什么意思
- Dubbo集群容错模式之Failsafe实现
- Python逆向进阶:Web逆向私单
- 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)
- 智能机器人用什么语言编程
- MFC应用程序单文档及类向导的使用
热门文章
- php echo 莫名出现空行
- JSP+ssm计算机毕业设计地方特色风味小吃的推荐系统3fs3p【源码、数据库、LW、部署】
- 【自学笔记】简单java电话本管理系统v1.0源码
- Debian cinnamon 搜狗输入法
- 2019西安草莓音乐节-周六这么过
- 【89】nbtstat
- 2017计算机省一试题及答案,2017年全国计算机等级考试一级练习试题及答案(一)...
- 精仿《问答库》题库问答学习平台网站源码整站源码,帝国CMSv7.5内核,知识付费考试题库
- 什么是kafka?Kafka如何使用?(大数据-卡夫卡)
- 美的智家、海尔智家,吹响新一轮AI竞赛号角