gpt4 book ai didi

java - 最好的选择?编译前编辑字节码(asm)或编辑java文件

转载 作者:行者123 更新时间:2023-11-30 09:40:30 24 4
gpt4 key购买 nike

目标

  • 检测变量之间的比较和副本的位置
  • 在操作发生的行附近注入(inject)代码
  • 代码的目的:每次运行类时都会增加计数器

一般用途:统计某些参数执行后的比较次数和拷贝次数

2个选项

注意:我总是有一个 .java 文件开头

1) 编辑java文件


查找与正则表达式的比较并在该行附近注入(inject)代码段然后编译类(我的应用程序使用JavaCompiler)

2)使用ASM字节码工程


同时检测我想跟踪的事件并将片段注入(inject)字节码然后使用(已经编译但修改过的)类

我的问题

最好/最干净的方法是什么?有更好的方法吗?

最佳答案

如果您选择 Java 路线,您不想使用正则表达式——您需要一个真正的 Java 解析器。所以这可能会影响你的决定。请注意,Oracle JVM 包含一个,作为实现 java 编译器的内部私有(private)类的一部分,因此如果您不想的话,您实际上不必自己编写一个。但是解码 Oracle AST 也不是 5 分钟的任务。当然,如果这很重要,那么使用它是不可移植的。

如果你走 ASM 路线,字节码最初会更容易分析,因为语义要简单得多。就您的解决方案的净时间而言,分析的简单性是否胜过不熟悉是未知的。最后,就生成的代码而言,两者都不是“更好”。

与只查看生成的 Java 源代码并“知道”所见即所得相比,进行类文件的原始转储以进行调试等显然很简单,但所有这些显然都很简单,因为您已经熟悉的 Java 语言。一旦您花一些时间研究字节码,它也会变得很舒服。只是一个问题,一开始是否值得您花时间到达那里。

关于java - 最好的选择?编译前编辑字节码(asm)或编辑java文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com