Android 代码JIT友好度检测工具

 更新时间:2016年08月31日 14:51:37   作者:技术小黑屋  
本文主要介绍一个Android代码JIT友好度检测工具,这里对JIT工具的资料做了一下整理,有需要的小伙伴可以参考下

利用周末的时间,写了一个检测Android代码JIT友好度的工具,取个名字为DroidJitChecker。希望可以帮助大家快速发现有坏味道的代码,并且及时修正。

名词解释

  1. JIT:JIT全称Just-in-time compilation。意思为实时编译,是JVM中一种优化技术,对频繁调用并且符合条件的方法进行优化将字节码翻译成机器代码,提升执行效率。
  2. 方法大小:每个方法的方法体实现都可用字节作为单位进行衡量,通常情况下,方法体越大,其方法大小也越大。
  3. JIT友好:通常方法体实现越小越简单,越对JIT编译友好。

这是什么

  1. 这是一个检测Android(目录组织结构)代码JIT友好度的工具
  2. 该工具基于AdoptOpenJDK/jitwatch中的jarScan.sh进行组装
  3. 输出结果支持html,便于在浏览器中查看

前提准备

  1. 所检测Android项目可以支持Gradle编译成功
  2. 安装jitwatch套件
  3. 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/"

修改说明

  1. jarScan 必须修改,修改成已经安装的的JarScan路径
  2. maxMethodSize 无需更改,如更改请谨慎
  3. 输出目录,outputDir,建议修改为可以持续存在的目录

如何使用

使用比较简单,打开终端,执行如下语句

ruby jitChecker.rb your_android_project jarTask

注意:jarTask是一个将工程的java文件编译成jar包的任务,可以通过执行./gradlew tasks 查看,然后选择以jar开头的任务即可。

查看结果

  1. 检查结束后,会自动使用浏览器打开结果
  2. 结果文件路径也会输出到终端
  3. 结果文件名中包含了相关的jarTask信息,便于查找
  4. 结果内容,依照方法的字节大小,从大到小降序排列

一个典型的内容示例

MD4.mdfour64

Package:com.app.utils
Parameters:int[]
ByteSize:1129
  1. MD4.mdfour64 对JIT不友好的方法及其所属类
  2. Package:com.app.utils 上述MD4所属的包
  3. Parameters:int[] mdfour64方法接受的参数
  4. ByteSize:1129 表示mdfour64方法持有的大小

如何解决

  1. 书写逻辑简单,职责单一的小方法
  2. 书写逻辑简单,职责单一的小方法
  3. 书写逻辑简单,职责单一的小方法

贡献代码

任何有帮助的建议都欢迎。

以下代码贡献更收欢迎

美化结果展示页面(HTML,CSS)

问题

问:字节量大的方法一定要修改么,修改后就能JIT编译么

答:字节量大的方法建议修改,非强制,修改后不一定就能JIT编译,因为对JIT优化并不意味着JIT就编译该方法,还需要其他因素,比如该方法的调用频率。所以这是一个你情我愿的事情。

为什么用Ruby

答:有了idea时很纠结,因为不确定用什么语言实现,尤其是在Python和ruby之间,为此问了不少同学,最后“一意孤行”决定用Ruby了,不喜欢Python的强制对齐,超级喜欢Ruby的字符串模板。Ruby很简单,很人性化,相信你会喜欢的。

源码

DroidJitChecker@Github

以上就是对Android JIT 代码友好度检测工具的资料整理,谢谢大家对本站的支持!

您可能感兴趣的文章:

相关文章

  • 如何从外部浏览开启Android App

    如何从外部浏览开启Android App

    从浏览器中点击某个按钮,如果手机上装有相应的app,则直接开启app,并且到相对的页面。如果没有装该app,则会到相应的下载app的界面。这样的功能怎么实现呢,本文带着大家来看看如何实现。
    2021-06-06
  • Android仿zaker用手向上推动的特效开发【推动门效果】(附demo源码下载)

    Android仿zaker用手向上推动的特效开发【推动门效果】(附demo源码下载)

    这篇文章主要介绍了Android仿zaker用手向上推动的特效,结合完整实例形式分析了Android滑动切换效果的实现步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Android仿QQ可拉伸头部控件

    Android仿QQ可拉伸头部控件

    这篇文章主要为大家详细介绍了Android仿QQ可拉伸头部控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android开发之拖动条和评分组件用法分析

    Android开发之拖动条和评分组件用法分析

    这篇文章主要介绍了Android开发之拖动条和评分组件用法,结合实例形式较为详细的分析了Android拖动条及评分组件的布局与功能实现技巧,需要的朋友可以参考下
    2017-07-07
  • 详解Android Selinux 权限及问题

    详解Android Selinux 权限及问题

    本篇文章主要介绍了详解Android Selinux 权限及问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Android AutoValue使用和扩展库

    Android AutoValue使用和扩展库

    今天小编就为大家分享一篇关于Android AutoValue使用和扩展库的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 简析Android五大布局(LinearLayout、FrameLayout、RelativeLayout等)

    简析Android五大布局(LinearLayout、FrameLayout、RelativeLayout等)

    这篇文章主要为大家简单分析了Android五大布局,内容有LinearLayout、FrameLayout、RelativeLayout、AbsoluteLayout和TableLayout的相关资料,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android Studio实现帧动画

    Android Studio实现帧动画

    这篇文章主要为大家详细介绍了Android Studio实现帧动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Android统一处理登录后携带数据跳转到目标页面的方式

    Android统一处理登录后携带数据跳转到目标页面的方式

    我们在开发的时候,一定会遇到页面跳转,下面这篇文章主要给大家介绍了关于Android统一处理登录后携带数据跳转到目标页面的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • AndriodStudio使用listview实现简单图书管理

    AndriodStudio使用listview实现简单图书管理

    这篇文章主要为大家详细介绍了AndriodStudio使用listview实现简单图书管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论