Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法代码太大!使用ASM时发生异常_Java_Java Bytecode Asm - Fatal编程技术网

Java 方法代码太大!使用ASM时发生异常

Java 方法代码太大!使用ASM时发生异常,java,java-bytecode-asm,Java,Java Bytecode Asm,我使用ASM代码迭代一个类,而不操纵任何字节码。 但是当我将classwriter转换为bytearray(cw.toByteArray())时,我得到了 方法代码太大!例外 有人能告诉我这是什么时候发生的吗 我的代码片段如下--- Java中的某些方法已经相当大,检测它们会进一步增加它们的大小,从而导致您观察到的异常。如果我没有错的话,JVM会对任何方法的大小施加65535字节的大小 一个试图克服这个问题的解决方案/项目着眼于拆分有问题的方法。。。以下是指向其git存储库的链接:。它基于ASM

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

有人能告诉我这是什么时候发生的吗

我的代码片段如下---


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


一个试图克服这个问题的解决方案/项目着眼于拆分有问题的方法。。。以下是指向其git存储库的链接:。它基于ASM本身。希望这有帮助

我检查了上面的链接。我们是否需要将上面链接项目中的asm jar文件导入到项目中…我从来没有使用过这个项目本身。。。但是你所说的听起来是对的。链接项目已经有一段时间没有更新了,作为替代方案,我在JLink中为JDK开发了一个更简单但可能不太健壮的解决方案,它没有解决方法。错误:jdk.internal.org.objectweb.asm.MethodTooLargeException:方法太大:jdk/internal/module/SystemModules$all.moduleDescriptors()[Ljava/lang/module/ModuleDescriptor;@vijay bitbucket链接已断开。请修复它,谢谢!
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"