tener - ¿Se permiten las máximas líneas de código en una clase de Java?
estandares de codificacion java (4)
Creo que hay un límite de 64 kb en el tamaño del bytecode por método.
¿Cuántas líneas de código puede contener un archivo .java
? ¿Depende de que se use la JVM?
No hay límite en "líneas de código", pero hay un límite en el tamaño total. Cada método tiene un límite de 64 kb.
Solo me he encontrado con herramientas de generación de código.
Si estás llegando al límite, ten cuidado. Una gran cantidad de herramientas de seguimiento y generación de perfiles utilizan la inserción de código de bytes. Pueden empujarte por la parte superior si estás demasiado cerca. Lo que es peor es que a menudo alteran los archivos de clase después de la compilación. Todo se compila y ejecuta en su entorno de desarrollo, pero se bloquea cuando activa sus herramientas de monitoreo en Prueba o Control de calidad.
Recuerdo haber topado con este límite una vez en una página JSP compleja en Tomcat 4 (en el pasado cuando las personas aún usaban JSP). El archivo java generado a partir del JSP tenía un método que era demasiado grande para compilar, creo que tuve que dividir el archivo o hacer algún otro truco, lo que por supuesto era una buena idea en términos de legibilidad de todos modos.
El rastreador de errores de Sun me dice que algunas personas todavía tienen el mismo problema .
Para ampliar la respuesta de Jonas , la Especificación de Máquina Virtual de Java, Sección 4.8 Restricciones en el Código de máquina virtual de Java dice que:
El código de máquina virtual Java para un método, método de inicialización de instancia (§3.9) o método de inicialización de clase o interfaz (§3.9) se almacena en la matriz de código del atributo de Código de una estructura method_info de un archivo de clase. Esta sección describe las restricciones asociadas con los contenidos de la estructura Code_attribute.
Continuando con la Sección 4.8.1, Restricciones estáticas
Las restricciones estáticas en un archivo de clase son aquellas que definen la buena formación del archivo. Con la excepción de las restricciones estáticas en el código de máquina virtual Java del archivo de clase, estas restricciones se han dado en la sección anterior. Las restricciones estáticas en el código de la máquina virtual de Java en un archivo de clase especifican cómo las instrucciones de la máquina virtual de Java deben establecerse en la matriz de códigos y cuáles deben ser los operandos de las instrucciones individuales.
Las restricciones estáticas en las instrucciones en el conjunto de códigos son las siguientes:
...
- El valor del elemento code_length debe ser menor que 65536.
...
Entonces, un método tiene un límite de 65535 bytes de bytecode por método. (vea la nota abajo)
Para obtener más limitaciones para la JVM, consulte la Sección 4.10 Limitaciones de la máquina virtual Java .
Nota: Aunque aparentemente hay un problema con el diseño de la JVM, si la instrucción en el byte 65535 es una instrucción de 1 byte de longitud, no está protegida por el manejador de excepciones; esto se detalla en la nota 4 de la sección 4.10.