5

バイト コードを操作せずに、ASM コードを使用して 1 つのクラスを反復処理しています。しかし、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"
4

1 に答える 1

5

Java の特定のメソッドはすでに非常に大きく、それらを計測するとサイズがさらに大きくなり、観察した例外が発生します。私が間違っていなければ、JVM は任意のメソッドのサイズに 65535 バイトのサイズを課します。

この問題を克服しようとするソリューション/プロジェクトの 1 つは、問題のあるメソッドを分割することです。その git リポジトリへのリンクは次のとおりです: https://github.com/ThexXTURBOXx/asm-method-size。これは ASM 自体に基づいています。お役に立てれば。

于 2013-09-18T20:31:15.860 に答える