Cómo optimizar el rendimiento de Java

La pregunta es bastante inespecífica. Java es un lenguaje y también está la máquina virtual Java (jvm), en la que se ejecuta Java (el lenguaje), pero también otros lenguajes (Scala, por ejemplo).

Para Java, el lenguaje, el rendimiento puede aumentarse adoptando buenas prácticas de codificación. El libro de Joshua Bloch es la referencia: Java efectivo (2ª edición): Joshua Bloch: 8601400000663: Amazon.com: Libros

(Por ejemplo, en este libro, una lección sobre cómo evitar el boxeo / desempaquetado en un ciclo es simple pero muy efectiva).

Otro camino puede ser usar subprocesos múltiples: cuando la lógica de su código significa que puede procesar operaciones en paralelo. Java tiene buenas API para eso, y buenos frameworks también (como Apache Spark).

Para el jvm, puede ajustarlo por sí mismo (habilidades técnicas que no tengo) o elegir un idioma para ejecutar que no sea Java, sino un lenguaje que sea adecuado para procesar datos de forma paralela. Scala es el lenguaje comúnmente identificado para este tipo de situaciones.

Por supuesto, estos son solo el comienzo de una respuesta. Si utiliza Java para interfaces gráficas o cualquier otro caso específico, el ajuste del rendimiento será específico para los marcos involucrados.

Ah, y no lo olvides: la optimización prematura es la raíz de todo mal 🙂

La optimización del rendimiento es más efectiva si se realiza con un cuello de botella en lugar de una intuición. La segunda opción conduce a optimizaciones prematuras que eventualmente destruirán la legibilidad de su código.

Para realizar una optimización orientada al cuello de botella, realice los siguientes pasos (después de haber elegido su métrica de optimización):

  1. Ejecute el uso de memoria de código y perfil o el tiempo de CPU de sus métodos.
  2. Ordene los métodos por tiempo de CPU o uso de memoria y elija el método más destacado.
  3. Haga que este método sea más efectivo o trate de evitar la ejecución de este método mediante el almacenamiento en caché o la reestructuración de su código.
  4. Ir a 1.

Definitivamente, debería probar VisualVM, que es una herramienta gratuita de Java Profiler que viene con muchas distribuciones de Java (en la mayoría de los casos ya estará instalada en su máquina). Aquí hay una captura de pantalla de la documentación:

Como el método “RequestProcessor” domina el tiempo de ejecución (“Self Time”) del proyecto general, debe enfocar su energía en este método.

Con esta estrategia de optimización iterativa de cuellos de botella , puede reducir el tiempo de ejecución de su código por orden de magnitud en muchos casos.