Java 关于字节码和ASM的一些疑问
这是我的示例代码Java 关于字节码和ASM的一些疑问,java,java-bytecode-asm,Java,Java Bytecode Asm,这是我的示例代码 public void leak() { super.superMap = new ConcurrentHashMap<Integer, MemLeak>(); int i=1; while(true) { // This put method should be called infinite times super.superMap.put(i,new MemLeak("test"));
public void leak()
{
super.superMap = new ConcurrentHashMap<Integer, MemLeak>();
int i=1;
while(true) {
// This put method should be called infinite times
super.superMap.put(i,new MemLeak("test"));
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
“asm输出”是什么意思?你能在这里提供更多的上下文吗?(我们不知道从第一个代码块转换到第二个代码块的过程是什么…@JonSkeet:我正在使用
asm
framework修改字节码。我使用asmiger
类来查看字节码修改的ASM等效输出。我正在使用MethodVisitor
类修改字节码。那么您正在执行什么修改?在字节码中,方法调用的出现频率应该与源代码中的出现频率相同,而源代码中的出现频率正好是一次。不要将它与执行代码时发生的循环混淆。我不知道你为什么看了三遍。
public void visitMethodInsn(int opcode, String owner, String name,
String desc) {
super.visitMethodInsn(opcode, owner, name, desc);
// keep a check whether the owner class is Map or ConcurrentHashMap
System.out.println("Method called..."+owner+"\t "+name+"\t "+desc);
}