编程语言
首页 > 编程语言> > java – 方法代码太大了!使用ASM的例外

java – 方法代码太大了!使用ASM的例外

作者:互联网

我使用ASM代码迭代一个类而不操纵任何字节代码.
但是当我将classwriter转换为bytearray(cw.toByteArray())时,我正在
方法代码太大了!例外.

任何人都可以告诉我这是什么时候发生的..

我的代码片段如下—

InputStream in= new FileInputStream("D:/AshiqWorkspace/RandD/ByteCodeStudy/temp/GameManager.class");
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES);
ClassVisitor ca = null;
ca = new CustomClassNode(cw);  // CustomClassNode class extends ClassNode implements Opcodes
cr.accept(ca, 0);   
File outputDir=new File("D:/AshiqWorkspace/RandD/ByteCodeStudy/out");
outputDir.mkdirs();
DataOutputStream dout=new DataOutputStream(new FileOutputStream(new File(outputDir,"GameManager.class")));
dout.write(cw.toByteArray()); // on this line "method code too large exception coming"

解决方法:

Java中的某些方法已经非常庞大,并且检测它们会进一步增加它们的大小,从而导致您观察到的异常.如果我没有错,JVM对任何方法的大小强加65535字节的大小.

试图解决这个问题的一个解决方案/项目着眼于拆分有问题的方法……这里是它的git存储库的链接:https://bitbucket.org/sperber/asm-method-size.它基于ASM本身.希望这可以帮助.

标签:java,java-bytecode-asm
来源: https://codeday.me/bug/20190629/1325366.html