J2ME "Байт-код превышает 32 КБ" - PullRequest
2 голосов
/ 19 января 2011

Почему я получаю эту ошибку при компиляции файла Java в J2ME. Это из-за широкого использования объектов массива, так как у меня есть много объектов массива, определенных в файле Java?

Ответы [ 2 ]

3 голосов
/ 19 января 2011

Это может быть инициализатор массива в методе, например:

void someMethod() {
    int[] array = {0, 1, 2, 3};
}

Это эквивалентно:

int[] array = new int[4];
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;

и каждое назначение элемента занимает четыре инструкции VM (от 4 до 12 байтов кода на элемент.)

Если инициализатор слишком длинный, он превысит ограничение в 32 КБ для длины метода.

0 голосов
/ 19 января 2011

Существует ограничение с 32 КБ с кодом метода, обратите внимание, что не с размером файла класса.

Простой код

public void foo() {
    int arr[] = {1, 2, 3};
}

превратится в [используется javap для получения этого результата]

public void foo();
  Code:
   0:   iconst_3
   1:   newarray int
   3:   dup
   4:   iconst_0
   5:   iconst_1
   6:   iastore
   7:   dup
   8:   iconst_1
   9:   iconst_2
   10:  iastore
   11:  dup
   12:  iconst_2
   13:  iconst_3
   14:  iastore
   15:  astore_1
   16:  return

Таким образом, вы можете представить, что ваш огромный & ocmplex массив превратится в какой размер.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...