2013-09-18 2 views
2

Я выполняю повторение одного класса с использованием кода ASM без использования какого-либо байтового кода. Но когда я конвертирую классный класс в bytearray (cw.toByteArray()), я получаю Слишком большой код метода! исключение.Код метода слишком большой! исключение с использованием ASM

Может кто-нибудь сказать мне, когда это происходит ..

Мой фрагмент кода выглядит следующим образом ---

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" 

ответ

1

Некоторые методы в Java уже достаточно большой, и инструментирование их увеличивает их размер далее вызывая исключение, которое вы наблюдаете. Если я не ошибаюсь, JVM накладывает размер 65535 байт на размер любого метода.

Одно решение/проект, который пытается преодолеть эту проблему, рассматривает разделение методов оскорблений ... вот ссылка на его репозиторий git: https://bitbucket.org/sperber/asm-method-size. Он основан на самой ASM. Надеюсь это поможет.

+0

Я проверил вышеуказанную ссылку. Нужно ли сделать файл asm jar из вышеупомянутого проекта ссылки, чтобы импортировать его в проект ... –

+0

Мне никогда не приходилось использовать этот проект как таковой ... но то, что вы говорите, звучит правильно. – vijay

 Смежные вопросы

  • Нет связанных вопросов^_^