Android 代码JIT友好度检测工具
利用周末的时间,写了一个检测android代码jit友好度的工具,取个名字为droidjitchecker。希望可以帮助大家快速发现有坏味道的代码,并且及时修正。
名词解释
- jit:jit全称just-in-time compilation。意思为实时编译,是jvm中一种优化技术,对频繁调用并且符合条件的方法进行优化将字节码翻译成机器代码,提升执行效率。
- 方法大小:每个方法的方法体实现都可用字节作为单位进行衡量,通常情况下,方法体越大,其方法大小也越大。
- jit友好:通常方法体实现越小越简单,越对jit编译友好。
这是什么
- 这是一个检测android(目录组织结构)代码jit友好度的工具
- 该工具基于adoptopenjdk/jitwatch中的jarscan.sh进行组装
- 输出结果支持html,便于在浏览器中查看
前提准备
- 所检测android项目可以支持gradle编译成功
- 安装jitwatch套件
- ruby运行环境
安装
安装jitwatch组件
获取代码
git clone git@github.com:adoptopenjdk/jitwatch.git
编译
进入上面的repo目录,采用以下三种方法之一即可
ant
ant clean compile test run
maven
mvn clean compile test exec:java
gradle
gradlew clean build run
配置
获取本repo的代码,并打开config.ini文件修改
[setup] jarscan = "/users/androidyue/github/jitwatch/jarscan.sh" maxmethodsize = 325 outputdir = "/tmp/droidjitchecker/output_new/"
修改说明
- jarscan 必须修改,修改成已经安装的的jarscan路径
- maxmethodsize 无需更改,如更改请谨慎
- 输出目录,outputdir,建议修改为可以持续存在的目录
如何使用
使用比较简单,打开终端,执行如下语句
ruby jitchecker.rb your_android_project jartask
注意:jartask是一个将工程的java文件编译成jar包的任务,可以通过执行./gradlew tasks 查看,然后选择以jar开头的任务即可。
查看结果
- 检查结束后,会自动使用浏览器打开结果
- 结果文件路径也会输出到终端
- 结果文件名中包含了相关的jartask信息,便于查找
- 结果内容,依照方法的字节大小,从大到小降序排列
一个典型的内容示例
md4.mdfour64
package:com.app.utils parameters:int[] bytesize:1129
- md4.mdfour64 对jit不友好的方法及其所属类
- package:com.app.utils 上述md4所属的包
- parameters:int[] mdfour64方法接受的参数
- bytesize:1129 表示mdfour64方法持有的大小
如何解决
- 书写逻辑简单,职责单一的小方法
- 书写逻辑简单,职责单一的小方法
- 书写逻辑简单,职责单一的小方法
贡献代码
任何有帮助的建议都欢迎。
以下代码贡献更收欢迎
美化结果展示页面(html,css)
问题
问:字节量大的方法一定要修改么,修改后就能jit编译么
答:字节量大的方法建议修改,非强制,修改后不一定就能jit编译,因为对jit优化并不意味着jit就编译该方法,还需要其他因素,比如该方法的调用频率。所以这是一个你情我愿的事情。
为什么用ruby
答:有了idea时很纠结,因为不确定用什么语言实现,尤其是在python和ruby之间,为此问了不少同学,最后“一意孤行”决定用ruby了,不喜欢python的强制对齐,超级喜欢ruby的字符串模板。ruby很简单,很人性化,相信你会喜欢的。
源码
droidjitchecker@github
以上就是对android jit 代码友好度检测工具的资料整理,谢谢大家对本站的支持!
推荐阅读