使用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编写 打印方法运行的时间 代码分析 的相关文章

  • Java中静态字段的确切含义是什么?

    我想在同一类对象的各个实例之间共享一个对象 从概念上讲 当我的程序运行时 A 类的所有对象都访问 B 类的同一个对象 我见过那个static是系统范围的 并且不鼓励使用它 这是否意味着如果我有另一个程序在实例化 A 类对象的同一个 JVM
  • 在最近的 JVM 中,不可见引用仍然是一个问题吗?

    我正在读书Java 平台性能 http java sun com docs books performance 1st edition html JPAppGC fm html 遗憾的是 自从我最初提出这个问题以来 该链接似乎已经从互联网上
  • 为什么要实现finalize()?

    我已经阅读了很多 Java 新手问题finalize 令人困惑的是 没有人真正明确表示 Finalize 是一种不可靠的清理资源的方法 我看到有人评论说他们用它来清理连接 这真的很可怕 因为接近保证连接关闭的唯一方法是最后实现 try ca
  • 增加堆大小后无法启动 Glassfish

    我想增加 Glassfish 的堆大小 为此 我知道我可以达到 4GB java Xmx4000M version java version 1 6 0 26 Java TM SE Runtime Environment build 1 6
  • 内存中的方法表示是什么?

    在思考一下 Java C 编程时 我想知道属于对象的方法如何在内存中表示 以及这一事实如何涉及多线程 是为内存中的每个对象单独实例化一个方法还是执行 同一类型的所有对象共享该方法的一个实例 如果是后者 执行线程如何知道哪个对象是 要使用的属
  • 是否可以使 java.lang.invoke.MethodHandle 与直接调用一样快?

    我正在比较性能MethodHandle invoke以及直接静态方法调用 这是静态方法 public class IntSum public static int sum int a int b return a b 这是我的基准 Stat
  • Lambda 性能改进,Java 8 与 11

    我对 lambda 与方法参考运行了一些 JMH 测试 看起来类似于 IntStream reduce Integer max vs IntSream reduce i1 i2 gt Integer max i1 i2 我注意到 在 Jav
  • 我的代码中出现内存不足异常

    作为 Oracle 数据库压力测试的一部分 我正在长时间运行代码并使用 java 版本 1 4 2 简而言之 我正在做的是 while true Allocating some memory as a blob byte data new
  • 最近有关于 JVM 的书吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • HotSpot使用的Mark-Compact算法是什么?

    当阅读 Mark Compact 章节时垃圾收集手册 https rads stackoverflow com amzn click com 1420082795 提出了一系列替代方案 但其中大多数看起来很旧 理论上 例如 2 指压缩和 L
  • Java 接口合成方法生成,同时缩小返回类型

    我有 2 个接口和 2 个返回类型 interface interfaceA Publisher
  • Intellij Idea 使用什么 JVM 来启动?

    我是 Eclipse 用户 最近决定尝试 Intellij Idea 我的操作系统是 Ubuntu 12 使用 Eclipse 时 可以通过在 eclipse ini 中指定来轻松选择用于启动 Eclipse 的 JVM http wiki
  • 在 HP Load Runner 的 VuGen 中加载 javai.dll 时出现错误

    当我尝试在 HP load runner 的 VuGen 中编译一个简单的脚本时 无法启动 JVM 并出现以下错误 Java VM Internal Error Getting Error Loading javai dll 我在用着 HP
  • Scala 中的多个类型下限

    我注意到tuple productIterator总是返回一个Iterator Any 想知道是否无法设置多个下限 因此它可能是最低公共超类型的迭代器 我尝试并搜索了一下 但只发现this https stackoverflow com q
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • 使用 javac 和 javax.tools.JavaCompiler 有什么区别?

    Maven 编译器插件文档states http maven apache org plugins maven compiler plugin 编译器插件用于编译项目的源代码 从 3 0 开始 默认编译器是 javax tools Java
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • 调整 Java 类以提高 CPU 缓存友好性

    在设计java类时 对于实现CPU缓存友好性有哪些建议 到目前为止我学到的是应该尽可能多地使用 POD 即 int 而不是整数 这样 在分配包含对象时 数据将被连续分配 例如 class Local private int data0 pr
  • ASM之前看一下maxStack指令吗?

    我正在尝试使用 ASM 库将字节代码转换为不同的格式 这可以使用 MethodVisitor 来完成 就像这个简单的测试代码一样 return new MethodVisitor ASM7 Override public void visi

随机推荐

  • 碳中和数据合集(含上市公司碳排放、碳减排、排污费、环境税等数据)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 可以对照源代码在阅读本文同时可以看得更清晰一些 注 以下属于个人学习 理解 如果偏颇过深 非