2011-07-04 27 views
22

Llegué a saber que el tamaño máximo de un método en Java es de 64k. Y si supera, obtendremos una advertencia de compilación como "Código demasiado grande para compilar". Entonces, ¿podemos llamar esto un inconveniente de Java con esta pequeña cantidad de memoria?¿Tamaño máximo de un método en Java?

¿Podemos aumentar este límite de tamaño o es realmente posible aumentar?

¿Alguna idea sobre el tamaño de este método?

+1

(a) ¿Dónde ha leído esto? (b) ¿Por qué es importante? –

+24

Ese límite debe establecerse en 2k, para forzar la refactorización y el diseño agradable :) Al igual que el límite de 255 parámetros del método debe establecerse en 10. –

+3

Y (b) Si su código es más grande que 64 kb para un solo método ... tal vez es hora de refactorizar? – SJuan76

Respuesta

36

En mi experiencia, el límite de 64 KB es solo un problema para el código generado. esp. al incializar matrices grandes (que se hace en código)

En un código bien estructurado, cada método es una longitud manejable y es mucho más pequeño que este límite. Grandes cantidades de datos, que se cargarán en matrices, se pueden leer desde archivos que no son de Java, como un archivo de texto o binario.

EDIT:

Es destacable que el JIT no se compilará los métodos de más de 8 K. Esto significa que el código se ejecuta más lento y puede afectar los tiempos de GC (ya que es menos eficiente para buscar en la pila de llamadas de un hilo con métodos que no están compilados especialmente grandes)

Si es posible que desee limitar sus métodos a 8 K en lugar de 64 K.

+7

+1: El límite es un verdadero dolor para el código generado. –

+3

Mi trabajo alrededor del límite fue generar métodos para cada N líneas de código generado. Luego llámalos a todos con un nuevo método. – Diederik

+2

@Diederik es una pena que el compilador no sea lo suficientemente inteligente como para hacer eso por usted, o que el código de bytes admita métodos más grandes. –

6

64k es bastante, si lo excede puede pensar en reorganizar su código.

En mi proyecto encontré esta restricción una vez en las fuentes generadas. Resuelto simplemente dividiendo un método en varios.

3

Si su método es más largo de 50 líneas, incluyendo comentarios dentro - split eso. En este caso, nunca alcanzará ninguna limitación (incluso si existe).

Personalmente vi 1000 líneas de métodos largos (escritos por delincuentes que se llaman programadores :)) pero no vi ese tipo de limitación.

+6

Se senos más comúnmente en 2 casos: (a) de JSP, que es donde tropezó con eso; y (b) código generado. En ambos casos puede ser un infierno de un montón de trabajo para asegurar que su código de bytes siempre se encuentra bajo 64k. – corlettk

Cuestiones relacionadas