问题标签 [jvm-bytecode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 字节码中丢失了变量“最终”修饰符?
分析这个简单类的字节码,我得出的结论是编译器没有保留任何关于局部变量的信息final
。不过这看起来很奇怪,因为我相信 HotSpot 编译器实际上可以使用这些信息进行优化。
代码:
字节码:
除了节省磁盘空间之外,是否有任何特定原因不保留局部变量的访问标志?因为对我来说,存在似乎final
是变量的一个相对重要的属性。
java - 可以将同步块简化为字节码级别的 Try-Finally 块吗?
为类似 Java 的语言编写自己的编译器时,我无法编译synchronized blocks
. 我想出了以下想法将它们简化为try-finally
块:
可以换成
其中_monitorEnter
和_monitorExit
表示MONITORENTER
和MONITOREXIT
说明。
我对如何synchronized
编译的这个假设是正确的,还是我遗漏了什么?
编辑
我的实现以前在正文中对return
和throw
语句进行了一些特殊处理。基本上,它会在每个or指令之前手动加载所有lock
变量和它们。这是由块处理,还是我仍然需要这些检查?MONITOREXIT
*RETURN
THROW
finally
java - 如何从类中获取字节码作为字节数组
给定一个任意Class
实例,包括一个运行时生成的实例(.class
磁盘上没有文件),有没有办法获取类字节?
java - 将大量二进制数据加载到原始 JVM 字节码中的“[B”中
我正在以Krakatau语法生成 JVM 字节码,以将大型二进制 blob 加载到[B
. 关键是将所有实际数据存储在.class
文件中,而不是在运行时从外部源读取它。
我生成的代码如下所示:
但是,在运行时,此方法会失败,因为它太长了:
有没有更好的方法将大型二进制 blob 加载到字节数组中?我想一种解决方法是保留我当前的代码,但将其拆分为几种方法,但这太可怕了......
java - ASM 分析 MethodNode 故障
我想知道我是否可以直接创建一个MethodNode然后分析它。因此,我编写以下代码进行测试:
不幸的是,调用时抛出异常_analyzer.analyze()
:
我相信这是由 and 的未设置引起maxStack
的maxLocals
。看来我必须计算正确maxStack
and maxLocals
,然后visitMax()
在这里调用。有没有其他方法不计算这两个值?
我之前使用的另一种方法是一些代码,例如:
这可行,但我不喜欢它,因为它包括对 MethodNode 的多次访问。
目的:
我想为每个类实例生成一个 MethodNode,并且每个实例都保留对生成的实例的引用。在第一个代码中,我的想法是直接创建一个ClassNode和目标MethodNode,在此期间让_node
指针直接指向目标MethodNode。这样整个ClassNode就只有1次访问,即在ClassNode创建过程中获取MethodNode。
对于第二部分代码,使用 ClassWriter 并访问它。之后cw.visitEnd()
,我必须再次访问它以获得ClassNode,即reader.accept(classNode, 0);
。该班有两次来访。
android-studio - Kotlin 字节码 - 如何在 IntelliJ IDEA 中分析?
我想查看编译后的字节码,以便了解更多关于它如何在幕后工作的信息。我正在使用IntelliJ IDEA 15,但找不到查看字节码的方法。我错过了什么?
java - 使用 ASM 进行字节码分析
我正在评估使用 ASM 作为框架来实现一些字节码分析的可能性。到目前为止,我一直在玩一些示例,但有几件事需要整理:1)我看不到如何使用 MethodVisitor 类检测方法的完全签名(完整的参数类型名称和形式名称)。
2)如果正在分析的.class文件关联了java源,如何将字节码指令与源中的行号链接起来
3)如何区分ClassVisitor中的实例字段和静态字段
jvm - 完整的 ASM 代码示例(仅分析)
是否有任何好的端到端 ASM 示例,但仅用于解析和分析字节码?我发现了很多涉及字节码生成的例子,但是像数据流分析或控制流分析这样的分析呢?
java - 理解为一个简单的 java 类生成的字节码
我正在关注这个博客来研究 java 到字节码,并且我已经为这个 SimpleClass 生成了字节码。
我理解字节码位置如下
- 0 代表“这个”
- 1 用于调用超类 Object 的构造函数。
- 4——?
- 5 代表价值 5
- 6 从堆栈中弹出并将 5 分配给变量。
但我不明白aload_0
位置 4 及其目的?
compilation - 可能优化字节码序列
我在内联多方法调用后生成了一个字节码序列。内联开始时,我首先将现有变量索引弹出到一个新的局部变量编号,以防内联方法出现任何异常。这个操作会在最终的字节码中产生一些 xLOAD 和 xStore 序列。样本是:
我想知道是否有一些众所周知的优化来消除这些 xLoad/xStore 序列。
谢谢