使用ASM编写 打印方法运行的时间 代码分析

2023-11-16

请先简单阅读下原文代码

https://blog.csdn.net/weixin_44618248/article/details/107086410
可以对照源代码在阅读本文同时可以看得更清晰一些

注⚠️:以下属于个人学习,理解 如果偏颇过深 非常欢迎在评论看到您的看法和想法

先看前一段代码

	val startTimeLabel = newLabel()  //标签
    val endTimeLabel = newLabel()  //标签

⬆️ 用于向 本地变量表1⃣️ 中插入变量时候使用

    var startTimeIndex: Int = 0

⬆️ 用于记录 变量在 本地变量表1⃣️ 里面的位置
因为待会要从这个 本地变量表1⃣️ 里面去取数据

    override fun onMethodEnter() {
        super.onMethodEnter()

        startTimeIndex = newLocal(Type.DOUBLE_TYPE)

⬆️ 通过 newLocal方法新建一个类型为 Double 的变量并记录它在 本地变量表1⃣️ 中的位置

        startTimeLabel.let {
            visitLabel(it)
        }

⬆️ 记录label的顺序 表示在这一行开始

        mv.visitLocalVariable(
            "startTime",
            "J",
            null,
            startTimeLabel,
            endTimeLabel,
            startTimeIndex
        )

⬆️ 向 本地变量表1⃣️ 中声明变量 :

  • 变量名称叫做startTime
  • 类型为 J2⃣️
  • 没有泛形
  • 变量存活生命周期开始于 startTimeLabel
  • 变量存活生命周期结束于 endTimeLabel
  • 它的下标位置在 startTimeIndex
        mv.visitMethodInsn(
            Opcodes.INVOKESTATIC,
            "android/os/SystemClock",
            "currentThreadTimeMillis",
            "()J",
            false
        )

⬆️ 在该字节码下一行插入

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ASM编写 打印方法运行的时间 代码分析 的相关文章

随机推荐

  • 碳中和数据合集(含上市公司碳排放、碳减排、排污费、环境税等数据)1990-2022年

    数据简介 推动企业形成绿色生产方式和生活方式 支持有条件的地方和重点行业 重点企业率先达到碳排放峰值 可见 企业已成为应对气候变化 推动低碳转型 助力 双碳 目标实现的主力军 推动其绿色 低碳化转型已成为未来经济发展的必然趋势 此背景下 作
  • linux环境下运行flex,什么是flex?

    昨天装一个软件的时候 configure后遇到下面的问题 错误代码见最后 网上查到有什么 FLEX 2 01 全套下载 客户端 Flex Builder 2 with Charting 集成 Flex Builder 2 Flex 2 SD
  • LeetCode 232. 用栈实现队列

    题目链接 https leetcode cn problems implement queue using stacks 栈的特点是先进后出 而队列的特点是先进先出 我们用两个栈正好能把顺序反过来实现类似队列的操作 stackData 作为
  • navicat连接linux虚拟机上的mysql出现10060的错误解决

    https www cnblogs com mmzs p 9201558 html 我的是当时配置MySQL的时候在iptables文件里面添加了3306但是 我没有保存 所以没有监听到这个端口 弄了一中午 唉 最终通过上面的文章得以解决
  • numpy_diag函数

    diag的函数原型如下 numpy diag v k 0 如果v是一维数组 则函数返回以v为对角线的对角矩阵 如果v是二维数组 则函数返回v的对角线 import numpy as np a np arange 9 reshape 3 3
  • 如何进行技术选型

    在重大产品决策或者大规模应用开发前一般需要进行技术选型 特别是需要开发一个之前没有了解过的系统或者应用时 其目的是为了降低产品研发的技术风险 所以首先需要明确为什么需要技术选型 需要达到什么目的 整个过程需要有一套的组织流程来保证 一般可以
  • SpringBoot实现原理

    一 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用
  • 深入Redis命令的执行过程

    深入Redis命令的执行过程 Redis 服务器 Redis 服务器实现与多个客户端的连接 并处理这些客户端发送过来的请求 同时保存客户端执行命令所产生的数据到数据库中 Redis 服务器依靠资源管理器来维持自身的运转 其主要作用是管理 R
  • charles抓取https请求_Charles抓包

    欢迎关注公众号 学习资料不会少 Windows端设置抓取https请求 安装证书 打开Charles 选择 Help SSL Proxying Install Charles Root Certificate 信任证书 弹出安装证书对话框
  • springboot中logback日志配置

    springboot中logback日志配置 前言 默认配置 logback spring xml详细配置 前言 Spring Boot使用Apache的Commons Logging作为内部的日志框架 其仅仅是一个日志接口 在实际应用中需
  • 模拟实现memcpy()memcmp()memmove()

    核心 memcpy 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置 这个函数在遇到 0 的时候并不会停下来 如果source和destination有任何的重叠 复制的结果都是未定义的
  • crmeb 知识付费伪静态怎么设置?

    伪静态配置 可以通过URL重写隐藏应用的入口文件index php 下面是相关服务器的配置参考 Apache httpd conf配置文件中加载了mod rewrite so模块 AllowOverride None 将None改为 All
  • 程序员开发软件的意义在哪?

    有一篇热文 写了8年的代码 做过的项目都下线了 程序员的意义在哪里 作者8年工作和业余时间开发几十个项目 几乎都关闭了 想当初 很用心的去开发每一个项目 如今 这些项目只能一个个关闭 这真的使我很悲观 我花了那么多的时间精力 去做的事情 竟
  • GitHub怎么搜索项目

    GitHubGitHubGitHub各位应该都很熟悉了 全球最大的开源社区 也是全球最大的同性交友网站 但是大部分同学使用GitHub应该就是通过别人的开源链接 点进去下载对应的项目 而真正使用Github来查找开源项目的还是少数 面试总得
  • Linux系统之安装mariadb方法

    Linux系统之安装mariadb方法 一 检查系统版本 二 配置mariadb的yum源 1 配置yum源 2 替换中科大的源 三 检查yum仓库 1 修改 etc yum conf文件 2 检查yum仓库 四 安装mariadb 五 启
  • Spring的下载与安装(一)

    Spring是一个独立的框架 它不需要依赖于任何Web服务器或容器 它既可在独立的Java SE项目中使用 也可以在Java Web项目中使用 下载Spring地址 https repo spring io libs release loc
  • 新iPad未到 老iPad价格反弹

    新版水货仍维持5500元高位 CFP供图3月25日 新款iPad2在全球各地陆续上市 但国内迟迟没有消息 让不少苹果粉丝将目光重新转向刚刚降价的一代iPad 然而 最受欢迎的WiFi 16G B版本iPad却因货源不足 已出现价格反弹的现象
  • UDP服务器客户端编程流程

    UDP服务器客户端编程流程 UDP编程流程 UDP服务端代码实现 UDP客户端代码实现 UDP服务端客户端代码详解 UDP编程流程 UDP提供的是无连接 不可靠的 数据报服务 UDP是尽最大能力进行传输 但是并不能保证可靠性 TCP的可靠性
  • 普通人学Python有什么用?能干什么?

    我想学 Python 但是学完 Python 后都能干啥 相信不少 Python 的初学者 都会遇到上面的这些问题 很多的答案会涌入我们的脑海 因为Python实在是能做太多事情了 但是慢慢静下心来思考 我发现Python主要有三个方面的应
  • 使用ASM编写 打印方法运行的时间 代码分析

    请先简单阅读下原文代码 https blog csdn net weixin 44618248 article details 107086410 可以对照源代码在阅读本文同时可以看得更清晰一些 注 以下属于个人学习 理解 如果偏颇过深 非