华为踩着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:

参考https://zhuanlan.zhihu.com/p/81340230,感谢从Android源码中找到并提供java-core库。建议编译的时候编译成debug版本的。这样可以对照详细日志有利于后面的编译理解。

第一步:

调用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的可读性更强一点。

华为方舟编译器理解:初探相关推荐

  1. 华为的Java虚拟机_华为方舟编译器解析:提升安卓运行效率

    在今年发布P30的时候,华为还发布了一个名为"方舟"的编译器,但是很多人对方舟到底是什么其实有误解,这里我们就来详细说说.可以肯定的是,方舟并不是单独操作系统!而是安卓上的工具. ...

  2. 华为方舟编译器是黑科技?

    在4月份,华为P30系列发布会上,华为消费者终端业务CEO余承东除了给消费者带来了万众期待的华为P30 Pro,还公布了一个全新的黑科技:华为方舟编译器.该编译器可以改善安卓应用编译效率,从原先的边解 ...

  3. 万字长文详解华为方舟编译器的荣光和使命

    本文由MO编辑部出品,文字超1万,查阅的资料多达上百万文字,并且与华为方舟编译器的专家做过深度访谈.其不仅解析了华为在编译器和手机系统方面做的多年准备,也向读者展现了波澜壮阔的软件产业发展史. 201 ...

  4. xposed插件加固保护方案以及对华为方舟编译器的思考

    目前市面上各家加固厂商在对普通App的加固上已经做得比较成熟稳定,而且强度也很高了.但是似乎没有一个针对xposed插件加固的方案,笔者在试用了几家加固后,均会导致xposed插件的崩溃,要么就是插件 ...

  5. 关于华为方舟编译器,你想知道的都在这里!

    原文链接地址: 关于华为方舟编译器,你想知道的都在这里! - 华为终端的文章 - 知乎 https://zhuanlan.zhihu.com/p/77108133 2017年5月的一个凌晨,华为某实验 ...

  6. 【IT资讯】华为方舟编译器编译工具正式发布和工具下载

    01. 概述 2019华为全球开发者大会将在8月9日-11日在华为松山湖基地召开.本次开发者大会邀请了1500位合作伙伴.5000名全球开发者,将是华为历来规模最大的一次会议.在这次大会上,华为方舟编 ...

  7. 华为方舟编译器开源官网正式上线

    [摘要] 8月31日,华为方舟编译器开源官网正式上线. 本次方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch6 ...

  8. 华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破

    在华为春季发布盛典上,除了"HUAWEI P30"还有一个词也火了一把,那就是全新黑科技--"华为方舟编译器"! 先花一分钟,戳视频链接简单了解下 方舟编译器虽 ...

  9. 华为方舟编译器正式上线 已经拥有45家合作伙伴

    在前不久刚结束的华为开发者大会上,华为公布了方舟编译器的开源时间,8月31日,华为方舟编译器开源官网正式上线. 根据官网上的介绍显示,华为方舟编译器的优势主要有四个. 1.多语言联合 方舟编译器将同一 ...

最新文章

  1. java foreach order_Java 8流中的forEach vs forEachOrdered
  2. C#/.Net判断是否为周末/节假日
  3. windows 下使用composer
  4. Visual Studio 2019设置回车代码补全
  5. 数据访问函数库 for ado.net2.0
  6. 基本数据类型和包装类型
  7. grep、sed命令使用记录
  8. Cisco3550三层交换机vlan间路由配置实例
  9. 假设检验 python_数据清洗、假设检验
  10. 印第安纳大学计算机与信息学院,印第安纳大学伯明顿分校管理信息系统(MIS)专业详解...
  11. input 搜索localStorage存储历史记录 删除历史记录
  12. 八位硕博大佬的百度之旅~
  13. char ch= 中 什么意思java_问一下java里的char到底是什么
  14. 不要再叫自己“程序员”了!
  15. 连接服务器显示凭据,连接云服务器时的凭据是什么意思
  16. Dubbo集群容错模式之Failsafe实现
  17. Python逆向进阶:Web逆向私单
  18. 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)
  19. 智能机器人用什么语言编程
  20. MFC应用程序单文档及类向导的使用

热门文章

  1. php echo 莫名出现空行
  2. JSP+ssm计算机毕业设计地方特色风味小吃的推荐系统3fs3p【源码、数据库、LW、部署】
  3. 【自学笔记】简单java电话本管理系统v1.0源码
  4. Debian cinnamon 搜狗输入法
  5. 2019西安草莓音乐节-周六这么过
  6. 【89】nbtstat
  7. 2017计算机省一试题及答案,2017年全国计算机等级考试一级练习试题及答案(一)...
  8. 精仿《问答库》题库问答学习平台网站源码整站源码,帝国CMSv7.5内核,知识付费考试题库
  9. 什么是kafka?Kafka如何使用?(大数据-卡夫卡)
  10. 美的智家、海尔智家,吹响新一轮AI竞赛号角