Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] ECLIPSE Java: the code for the static initializer is exceeding the 65535 bytes limit

Estas en el tema de ECLIPSE Java: the code for the static initializer is exceeding the 65535 bytes limit en el foro de Java en Foros del Web. Estoy utilizando el editor Eclipse y me sale el siguiente mensaje en la línea donde declaro la clase principal: "the code for the static initializer ...
  #1 (permalink)  
Antiguo 17/11/2015, 12:32
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 10 años, 8 meses
Puntos: 1
ECLIPSE Java: the code for the static initializer is exceeding the 65535 bytes limit

Estoy utilizando el editor Eclipse y me sale el siguiente mensaje en la línea donde declaro la clase principal:

"the code for the static initializer is exceeding the 65535 bytes limit"

Dentro de la clase principal tengo varios arrays y variables declarados y rellenados con datos como static y parece que exceden el limite del 64K !!! para que pueda ser compilado.

¿ Se puede tocar el limite para que te permita poner código de mas de 64K por clase ? ¿ Cual seria la solución ?
  #2 (permalink)  
Antiguo 17/11/2015, 14:02
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 13 años, 11 meses
Puntos: 7
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

Dentro de la carpeta de Eclipse tienes un archivo que es el eclipse.ini, ahí tienes la posibilidad de variar la memoria mínima, máxima y default del Eclipse.

No obstante, llégate hasta aquí:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=29376.
__________________
El último TipdaR
  #3 (permalink)  
Antiguo 17/11/2015, 15:58
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

Abriendo el fichero .ini tengo lo siguiente:

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1. 1.300.v20150602-1417
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms256m
-Xmx1024m

¿Que tengo que cambiar o agregar ?
  #4 (permalink)  
Antiguo 18/11/2015, 02:52
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 5 años, 1 mes
Puntos: 182
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

Buenas,

Ese limite viene implicito en la JVM y la estructura del bytecode. El codigo de los metodos (la inicializacion estatica se considera un metodo) tiene un limite de 64K.
Este limite no se puede cambiar.

Para solucionarlo puedes declarar las variables en varias clases o bien delegar la inicializacion a otros metodos.

Por ejemplo, si tienes:

Código Java:
Ver original
  1. static String[] variable1 = {"", "", "", "" ......}
  2. static String[] variable2 = {"", "", "", "" ......}

Lo puedes hacer asi:

Código Java:
Ver original
  1. static String[] variable1 = initVariable1();
  2. static String[] variable2 = initVariable2();
  3.  
  4. private static String initVariable1() {
  5.    return new String[] {"", "", "", "" ......};
  6. }
  7.  
  8. private static String initVariable1() {
  9.    return new String[] {"", "", "", "" ......};
  10. }


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 18/11/2015, 16:02
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

Gracias por la respuesta,

Pero si lo declaro de esa manera al hacer un

return new String[] {"","",""......

¿ Podrá ser el contenido declarado que retorna ser mayor de 64k ?
  #6 (permalink)  
Antiguo 19/11/2015, 08:01
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 5 años, 1 mes
Puntos: 182
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

No, el contenido de un metodo no puede ser mayor de 64K.

Por eso te comento que lo mejor es separarlo en varios metodos.

Podrias por ejemplo crear varios arrays en distintos modos y despues unirlos para la inicialization de la variable.

Código Java:
Ver original
  1. static String[] variable1 = ArrayUtils.addAll(initVariablePart1(), initVariablePart2(), initVariablePart3());


Nota: ArrayUtils pertenece a la libreria Apache Commons.

Es extrana la inicializacion que haces. Son datos de imagenes? No te seria mas facil tener la informacion en ficheros y leerla de ahi dinamicamente y copiarla en los arrays/variables?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 20/11/2015, 17:09
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

El motivo de estas inicializaciones como bien sospechas es referente a que cargo imágenes.

En concreto son Sprites de un clon de un juego de 8 bits de un Amstrad CPC que estoy haciendo a ratos. Los Sprites los he ido copiando pixel a pixel uno a uno en los arrays, no quería usar gifs ni png.

El caso es que quería tener 'todo' el código en un solo fichero incluida las clases declarándolas estaticas. Entonces con tanta declaración 'static' alfinal me ha dado el aviso del limite que creía que Java no tenia.

He optado por declarar en otro fichero una clase de variables globales con arrays únicamente para los Sprites con lo que ahora ya me permite ejecutar el código.

La idea del ArrayUtils la veo muy interesante también... Gracias por la ayuda !
  #8 (permalink)  
Antiguo 23/11/2015, 04:30
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 10 años, 4 meses
Puntos: 306
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

Cita:
Iniciado por loganbdn Ver Mensaje
En concreto son Sprites de un clon de un juego de 8 bits de un Amstrad CPC que estoy haciendo a ratos. Los Sprites los he ido copiando pixel a pixel uno a uno en los arrays, no quería usar gifs ni png.
¿Cuál es el sentido de no usar imágenes?
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #9 (permalink)  
Antiguo 23/11/2015, 16:02
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: ECLIPSE Java: the code for the static initializer is exceeding the 65535 b

La causa es que el clon del juego simula con métodos también la paleta de colores y la numeración para representarlos en pantalla. El juego usa el 'modo 0' con 4 bits por pixel, 16 colores de una paleta de 27.

Un gif usa 8 bits por pixel de una paleta RGB de 256 y un png al capturar los sprites me lo hacia en RGB 24 bits por pixel. Por lo que además tendría que hacer alguna clase de mas para convertir estas imágenes al formato del Amstrad.

Asi que preferí hacerlo dibujando los pixels 'artesanalmente' con su numeración como se hacia a la vieja usanza en estos ordenadores. También tuve que simular que cierta numeración de color permitiera tener un pixel parpadeante entre 2 colores como hacían estos ordenadores.

Última edición por loganbdn; 23/11/2015 a las 16:11

Etiquetas: clase, code, eclipse, limit, static
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:26.