¿Alguna vez han sentido que recorrer archivos de texto en Netbeans es un proceso lento a pesar que el hardware que utilizan es aceptable?. Pues bien, no están solos en el universo.
Durante varias semanas utilizando Netbeans tuve una pequeña sensación de lentitud al explorar archivos .java y .xhtml la cual a la larga se hizo bastante molesta. Luego de realizar algunas pruebas instalando Netbeans sobre una partición no encriptada, acelerar mi tarjeta grafica, ejecutar OracleJDK en lugar de OpenJDK, me entere que el antialiasing de las tipografias en Swing tiene un largo historial de problemas en Linux y de hecho sobre X11 muchas operaciones son ejecutadas por software causándome los problemas de lentitud.
¿Que es el antialiasing?
No me considero alguien indicado para definirlo, pero en pocas palabras el antialiasing suaviza las gráficas y mejora los bordes de los graficos (los jugadores de PC están bastante familiarizados con el termino). En las siguientes figuras se evaluá mejor el concepto:
¿Es mucha la diferencia de desempeño?
De acuerdo con la wiki de Netbeans los problemas con antialiasing solo se presentan en algunas tarjetas gráficas (vaya usted a saber en cuales), pero créanme, la diferencia es bastante perceptible, en los videos mostrados abajo realizo dos pruebas, la primera sin antialiasing y la segunda con antialiasing automático de swing el cual la documentación de Netbeans menciona como bastante acertado. En ambos casos htop esta configurado para tener siempre resaltado el proceso que corresponde a Netbeans.
Como se podrán dar cuenta en el primer video el uso de CPU difícilmente supera el 30% mientras que en el segundo video los desplazamientos intensivos por el código fuente alcanzan picos del 100% y se hace perceptible la lentitud de la JVM al renderizar los gráficos.
¿Alguna solución?
Solución 1:
En mis pruebas este fenómeno se hace más evidente al utilizar entornos gráficos con composite window managers (Gnome 3 normal, KDE, Compiz), y entre los look and feel más comunes y disponibles en la JVM (Nimbus, Metal, GTK/SystemLookAndFeel) el que presenta mejor desempeño es Metal. Al utilizar Fluxbox y Metal este fenomeno fue casi imperceptible.
Solución 2:
Si son usuarios de Gnome 3 como yo, estan jodidos solo queda deshabilitar el anti-aliasing 🙁
Para esto basta con agregar el parametro -J-Dswing.aatext=false a la variable netbeans_default_options dentro del archivo $NETBEANS_HOME/netbeans.conf si la instalación es por usuario o en /etc/<version netbeans>/netbeans.conf si como en mi caso la instalación es a nivel de sistema con el administrador de paquetes.
Por ultimo pueden probar con otros JVM switches para mejorar la ejecución de Netbeans, y si alguien logra algo aceptable por favor me avisa, yo simplemente probe tantas combinaciones que tuve que restaurar una copia del archivo netbeans.conf :(.
De buenas a primeras se notara la diferencia en el antialiasing, pero en mi caso considero más molesto sentir que mi instalación de Netbeans es impulsada por un pentium 4.