java performance dead-code

¿El código "muerto" dificulta el rendimiento de la aplicación Java?



performance dead-code (4)

No creo que el "código muerto" obstaculice el rendimiento de la aplicación, pero obstaculizará el rendimiento del desarrollo, que es invariablemente más caro.

Siempre que sea posible, el compilador JIT puede eliminar este tipo de código muerto ; consulte la eliminación de código muerto . Supongo que en teoría, si el compilador JIT eliminó grandes cantidades de código muerto, podría impactar en la compilación inicial .

Sin embargo, dudo que esto ocurra en la práctica, y solo recomendaría la eliminación del código muerto para facilitar o acelerar el desarrollo.

Acabo de instalar el Detector de código innecesario para Eclipse y lo ejecuté en mi proyecto. Veo muchos de los llamados "código muerto". Aunque, desde un punto de vista organizativo, tiene sentido eliminar el código muerto / innecesario, me hizo pensar:

¿El código muerto en realidad obstaculiza el rendimiento de una aplicación Java?

Para mí, si el código está realmente "muerto", nunca se ejecuta, por lo que no veo cómo eliminarlo (de nuevo, excepto para fines de organización / mantenimiento / limpieza del código) podría mejorar el rendimiento.


Podría afectar algunas cosas ...

  • Tamaño de la aplicación
  • Memoria utilizada cuando la aplicación se está ejecutando
  • Disminución del rendimiento en el escaneo de paquetes (si corresponde)

Podría afectar el rendimiento de su aplicación.

Editar

Una forma de verlo es; El código muerto agregará algo de memoria adicional a la aplicación en ejecución. Por lo tanto, también afectará el rendimiento de la aplicación.


Podría afectarlo un poco, pero el compilador JIT debería poder detectar y eliminar métodos que nunca se utilizan. E incluso si no lo hace, es probable que los gastos generales (memoria, tiempo de carga, tiempo de compilación JIT, etc.) sean pequeños.

Una razón mucho mejor para eliminar los métodos muertos es deshacerse de las "cosas viejas" que hacen que su base de código sea más difícil de leer, probar y mantener. Si este es el código que posiblemente necesite de nuevo, siempre puede recuperarlo del control de versiones.

¿Qué pasa si le pregunto al usuario a qué método desea llamar? , toma la entrada como una cadena y luego invoca ese método usando la reflexión? El JIT no puede decir qué método se utilizará, por lo que no puede eliminar ningún método :).

Buen punto. Así que probablemente no eliminará los métodos en la práctica (Pero podría ... si el cargador de clases supiera desde dónde recargar el método desde ...)

Los métodos muertos aumentan el área de método en JVM.

Sí, aunque el porcentaje de aumento de memoria es probablemente insignificante. Y la consiguiente reducción de rendimiento es probablemente aún menos significativa.

Además, un método que nunca se llama nunca se compilará con JIT, por lo que es probable que no incurra en un 50% o más de uso de memoria para un método en vivo típico.

Por lo tanto, demasiado código muerto puede conducir a la descarga de clases desde el área de método (montón) que podría afectar el rendimiento de la aplicación. estoy en lo cierto?

Eso es muy poco probable. Una clase solo se descargará si nada hace referencia a ella y su cargador de clases también es inalcanzable. Y si sucede, la clase no se usará de nuevo de todos modos, por lo que es correcto descargarla.