2011-12-06 22 views
6

Cuando comencé a estudiar Java, me indicaron que no hiciera System.out.println en la aplicación Java EE. Sin embargo, realmente no sé cuál es el motivo de no hacerlo.Peligro de System.out.println en la aplicación Java EE

Soy plenamente consciente de que si realmente necesitamos imprimir un documento importante, debe registrarse utilizando el marco de trabajo de registro.

Lo que realmente quiero preguntar aquí: ¿hay alguna verdadero peligro que System.out.println hacer? ¿Causa algún problema de rendimiento?

Respuesta

7

De hecho, es un problema de rendimiento. Si profundiza en el código fuente de JDK para System.out, finalmente encontrará un bloque synchronized en la secuencia de salida.

Eso significa que si coloca suficientes llamadas println en su código fuente, toda la base de código se ejecutará efectivamente de un solo subproceso, porque todos los subprocesos están esperando el bloqueo de sincronización.

Hay algunas estadísticas involucradas aquí, una sola llamada a println generalmente no va a poner a punto toda su aplicación. Cuantas más llamadas impriman en su código, más probable es que dos o más hilos deban esperar uno al otro.

3

Dentro de cualquier aplicación Java EE, es probable que haya múltiples aplicaciones ejecutándose dentro de la misma JVM. Solo hay un System.out. Si varias aplicaciones intentan escribir al System.out al mismo tiempo, puede causar contención en la salida y, teóricamente, podría afectar el rendimiento.

Además, aunque no está necesariamente relacionado con el rendimiento, hace que la salida sea muy complicada y difícil de leer, especialmente si varias aplicaciones están escribiendo salida al mismo tiempo, sin ninguna indicación de qué aplicación proviene la salida. (Lo mismo para múltiples solicitudes concurrentes dentro de incluso la misma aplicación.)

Como mencionó, el uso de un marco de trabajo apropiado eliminará estos dos problemas.

0

Un punto más, todo lo escrito con sysout estará allí en tiempo de ejecución, no puede controlarlo, se imprimirá siempre. Mediante el uso de la estructura de registro puede activar/desactivar el registro.