方法代码太大了! 使用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中的某些方法已经相当大,并且检测它们会增加它们的大小,从而导致您观察到的exception。 如果我没有错,JVM对任何方法的大小施加65535字节的大小。

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