1. Cree una instancia de una clase sin usar la nueva palabra clave
Cuando crea una instancia de una clase usando la nueva palabra clave, todos los constructores en la cadena de constructores se llaman automáticamente. Pero si un objeto implementa la interfaz Cloneable, podemos llamar a su método clone(). El método clone() no llama a ningún constructor de clase. Si crea un objeto usando el patrón Factory, es muy sencillo usar el método clone() para crear una nueva instancia de objeto.
2. No inicialices variables repetidamente
De forma predeterminada, Java inicializa las variables con ciertos valores cuando se llama al constructor de una clase. Esto debe tenerse en cuenta especialmente cuando una clase se deriva de otra clase, porque cuando se crea un objeto utilizando la nueva palabra clave, todos los constructores de la cadena de constructores se llamarán automáticamente.
3. Utilice las excepciones con precaución
Las excepciones son malas para el rendimiento. Lanzar una excepción primero crea un nuevo objeto. El constructor de la interfaz Throwable llama al método nativo llamado fillInStackTrace(). El método fillInStackTrace() verifica la pila y recopila información de seguimiento de llamadas. Cada vez que se produce una excepción, la JVM tiene que ajustar la pila de llamadas porque se crea un nuevo objeto durante el procesamiento. Las excepciones solo deben usarse para el manejo de errores y no deben usarse para controlar el flujo del programa.
Preste atención a los siguientes dos puntos. (1) Evite el uso de try/catch para la lógica de la aplicación. Si se puede procesar con declaraciones lógicas como if y while, intente no usar declaraciones try/catch tanto como sea posible. (2) Reutilice las excepciones cuando sea necesario el manejo de excepciones. , reutilice los objetos de excepción existentes tanto como sea posible. Porque en el manejo de excepciones, generar un objeto de excepción consume la mayor parte del tiempo.
4. Hilo
Los subprocesos pueden aprovechar al máximo los recursos del sistema. Mientras otros subprocesos esperan la lectura y escritura del disco duro o de la red, el programa puede continuar procesándose y ejecutándose. Sin embargo, el uso inadecuado de subprocesos también afectará el rendimiento del programa. Ejemplo: utilice la clase Vector correctamente. Vector se utiliza principalmente para guardar varios tipos de objetos (incluidos objetos del mismo tipo y de diferentes tipos). Vector proporciona funciones de protección de seguridad de subprocesos. Aunque muchos métodos de la clase Vector están sincronizados. Pero si ha confirmado que su aplicación es de un solo subproceso, la sincronización de estos métodos es completamente innecesaria. Además, cuando se buscan varios objetos almacenados en Vector, a menudo lleva mucho tiempo hacer coincidir los tipos. Cuando estos objetos son todos del mismo tipo, estas coincidencias son completamente innecesarias. Por lo tanto, es necesario diseñar una clase o colección de un solo subproceso que guarde objetos de un tipo específico para reemplazar la clase Vector.
Con respecto a las operaciones de subprocesos, tenga en cuenta: (1) Evite una sincronización excesiva. Si el programa es de un solo subproceso, asegúrese de no utilizar la sincronización. (2) Sincronizar métodos en lugar de sincronizar todo el segmento de código. Sincronizar un método tiene mejor rendimiento que sincronizar todo el segmento de código.
5. Intente utilizar variables locales
Los parámetros pasados al llamar al método y las variables temporales creadas durante la llamada se guardan en la pila (Stack), que es más rápido.
6. Utilice variables estáticas tanto como sea posible.
Deje que todas las instancias compartan esta variable.
7. Intente especificar el modificador final de la clase.
Las clases con el modificador final no se derivan. java.lang.String, especificar final para la clase String evita que las personas anulen el método length(). Además, si una clase se designa como final, todos los métodos de esa clase serán finales. El compilador de Java buscará oportunidades para incorporar todos los métodos finales, lo que puede mejorar el rendimiento en un promedio del 50%.
8. Creación de objetos y asignación de espacio y tamaño razonables.
A menudo se genera una gran cantidad de objetos (o instancias) en la programación JAVA. Debido a que el sistema no solo necesita tiempo para generar objetos, también puede tomar tiempo para recolectar basura y procesar estos objetos más adelante. Por lo tanto, generar demasiados objetos tendrá un gran impacto en el rendimiento del programa. Además, muchas clases en JAVA tienen sus tamaños de asignación de espacio predeterminados. Para la clase StringBuffer, el tamaño de espacio asignado predeterminado es de 16 caracteres. Si el tamaño del espacio de StringBuffer utilizado en el programa no es de 16 caracteres, entonces se debe realizar una inicialización correcta.
9. Utilice E/S sin bloqueo
Las versiones inferiores de JDK no admiten API de E/S sin bloqueo. Para evitar el bloqueo de E/S, algunas aplicaciones crean una gran cantidad de subprocesos (en el mejor de los casos, se utiliza un grupo de búfer). Esta técnica se puede ver en muchas aplicaciones que deben admitir flujos de E/S concurrentes, como los servidores web. JDK 1.4 introdujo una biblioteca de E/S sin bloqueo (java.nio).
Este artículo proviene del blog de CSDN. Indique la fuente al reimprimir: http://blog.csdn.net/Foxalien/archive/2009/12/18/5029659.aspx.