Este artículo resume las habilidades de optimización del rendimiento de Java. Compártelo para todos para su referencia. El análisis específico es el siguiente:
Aquí me refiero a algunos libros.
En los programas Java, la mayoría de las razones de los problemas de rendimiento no son un lenguaje Java, sino el programa en sí. Es importante desarrollar un buen hábito de código y puede mejorar significativamente el rendimiento del programa.
1. Intente usar el modificador final.
La clase con el modificador final es rebelde. En la API de Java Core, hay muchos ejemplos de final, como java.lang.string. Especificar final para la clase de cadena evita que los usuarios cubran el método Longitud (). Además, si una clase es definitiva, todos los métodos de esta clase son finales. El compilador Java está buscando todos los métodos finales de línea (que está relacionado con la implementación específica del compilador). Esto puede aumentar el rendimiento en un 50%en promedio.
2. Intenta reutilizar objetos.
Especialmente en el uso de objetos de cadena, StringBuffer debe usarse en su lugar cuando ocurre la situación de la conexión de cadena. Como resultado, los objetos excesivos tendrán un gran impacto en el rendimiento del programa.
3. Intenta usar variables locales.
Los parámetros pasados cuando el método de llamada y la variable temporal creada en la llamada se almacenan en pilas (pila), que es más rápida. Otras variables, como variables estáticas, variables de instancia, etc., se crean en el montón, que es más lento.
4. No repita la variable inicial.
Por defecto, al llamar al constructor de la clase, Java inicializa las variables en un determinado valor. establecido en falso. Cuando una clase se deriva de otra clase, esto debe anotarse particularmente, porque al crear un objeto con la nueva palabra clave, todo el constructor en la cadena del constructor se llama automáticamente.
Aquí hay una nota de que cuando se establece el valor inicial de la variable miembro, pero cuando necesita llamar a otros métodos, es mejor ponerlo en un método, como initxxx (), porque llamar directamente a un método para asignar un valor puede ser anormal porque la clase aún no se ha inicializado.
5. En el desarrollo del sistema de aplicaciones de Java+Oracle, el lenguaje SQL integrado en Java debe usarse lo más capital posible para reducir la carga de análisis del analizador Oracle.
6. Durante el proceso de programación de Java, la base de datos está conectada y la operación de la secuencia de E/S. Porque la operación de estos objetos grandes causará un gran sistema de gastos.
7. Los objetos de creación excesivos consumen una gran cantidad de memoria en el sistema.
El GC de JVM no es muy inteligente, por lo que se recomienda establecerlo manualmente en NULL después de que se usa el objeto.
8. Al usar el mecanismo de sincronización, intente sincronizar la sincronización de los códigos.
9. Intente minimizar el cálculo duplicado de las variables.
Por ejemplo
para (int i = 0; i <list.size (); i ++)
Debe modificarse a
para (int i = 0, len = list.size (); i <len; i ++)
10. La estrategia que comienza a crear cuando es necesario.
Por ejemplo:
String Str = "ABC";
Debe modificarse a:
if (i == 1) {String str = "ABC";
11. Use anormalidades con precaución, las anormalidades no son buenas para el rendimiento.
Lanzar anormalidades primero debe crear un nuevo objeto. El constructor de la interfaz de lanzamiento llama al método local llamado FillinStackTrace (). Mientras se lance las anormalidades, VM debe ajustar la pila de llamadas porque se crea un nuevo objeto durante el proceso de procesamiento.
Las anormalidades solo se pueden usar para el tratamiento de errores y no deben usarse para controlar el proceso del programa.
12. No use la instrucción Try/Catch en el ciclo, debe poner la prueba/captura en la capa más externa del ciclo.
El error es una clase que obtiene el sistema incorrecto, o es un error de máquina virtual. No se pueden obtener todos los errores, el error de la máquina virtual no se obtiene por excepción y se debe obtener un error.
13. Establezca su capacidad de inicialización a través del constructor de StringBuffer, que puede mejorar significativamente el rendimiento.
La capacidad predeterminada de StringBuffer es 16. Cuando la capacidad de StringBuffer alcanza la capacidad máxima, aumentará su propia capacidad a 2 veces +2, que es 2*n +2. Siempre que, siempre que StringBuffer alcance su capacidad máxima, tiene que crear una nueva matriz de objetos y luego copiar la matriz de objetos antiguo, que perderá mucho tiempo. ¡Por lo tanto, es necesario establecer un valor de capacidad de inicialización razonable para StringBuffer!
14. Uso razonable de java.util.vector.
Vector es similar a StringBuffer. La capacidad de almacenamiento predeterminada de Vector es de 10 elementos, que se duplica.
Vector.add (índice, obj) Este método puede insertar obj de elemento en la posición del índice, pero el índice y los elementos posteriores deben mover hacia abajo una posición a su vez (agrégalo a 1). A menos que sea necesario, no es bueno para el rendimiento.
La misma regla es adecuada para el método RETIME (INT índice), y se eliminan los elementos especificados en este vector. Mueva todos los elementos posteriores hacia la izquierda (menos 1). Regrese al elemento eliminado en este vector. Por lo tanto, eliminar el último elemento de vector es mucho más bajo que el de la sobrecarga del primer elemento. Eliminar todos los elementos es el mejor para usar el método RemoveLleilds ().
Si desea eliminar un elemento en Vector, puede usar vector.remove (obj); Vector.remove (índice);
15. Cuando se copia una gran cantidad de datos, use System.ArrayCopy ();
16. Reconstrucción del código para aumentar la legibilidad del código.
17. Ejemplos de creación de objetos sin la nueva palabra clave.
Al crear una instancia de la nueva palabra clave, todo el constructor en la cadena del constructor se llamará automáticamente. Pero si un objeto implementa la interfaz clonable, podemos llamar su método Clone (). El método Clone () no llama a ningún tipo de constructor.
La siguiente es una implementación típica del modelo de fábrica.
Public Static Credit getNewCredit () {return new Credit ();} El código mejorado con el método clone (), el crédito estático privado basecredit = new credit (); ;}
18. Si puede usar el desplazamiento, debe intentar usar el desplazamiento si puede usarlo, pero es mejor agregar un comentario, porque la operación de desplazamiento no es intuitiva y es difícil de entender.
19. No declare la matriz como: Final estática pública.
20. Haspmap atravesado.
Map <string, string []> paramap = new HashMap <String, String []> (); Cadena [] valores = Entry.getValue ();}
Use el valor disperso para eliminar la entrada correspondiente para comparar los resultados.
21.rray (matriz) y ArrayList.
La matriz de matriz es la mayor eficiencia, pero la capacidad es fija y no se puede cambiar dinámicamente.
22. Los hechos individuales deben intentar usar HashMap y ArrayList.
La diferencia entre 23. StringBuffer, StringBuilder es: Java.lang.StringBuffer Secure secuencia de caracteres variable de hilo. Un búfer de cadena similar a la cadena, pero no se puede modificar. En comparación con esta clase, StringBuilder generalmente debe usar la clase StringBuilder porque admite las mismas operaciones, pero debido a que no realiza la sincronización, la velocidad es más rápida. Para obtener un mejor rendimiento, debe especificar su capacidad tanto como sea posible al construir StringBuffer o StringBuilder. Por supuesto, no es necesario si no excede los 16 caracteres.
En el mismo caso, el uso de StringBuilder solo puede obtener del 10%al 15%de la mejora del rendimiento que el uso de StringBuffer, pero corre el riesgo de inseguro inseguro inseguro. Todavía se recomienda una consideración integral para usar StringBuffer.
24. Intente usar el tipo de datos básico en lugar del objeto.
25. Calcule el cálculo de la función compleja con cálculos numéricos simples , como resolver el problema de la función del triángulo.
26. El uso de analogías específicas y la eficiencia de la interfaz de uso es alto, pero la elasticidad estructural se reduce, pero el IDE moderno puede resolver este problema.
27. Considere usar métodos estáticos
Si no necesita acceder al exterior del objeto, haga que su método sea un método estático. La llamarán más rápido porque no necesita una mesa orientada a la función virtual. Este colega también es una buena práctica, porque ella le dice cómo distinguir la naturaleza del método, y llamar a este método no cambiará el estado del objeto.
28. Debe evitar usar el Get Inner, Establezca el método tanto como sea posible.
En la programación de Android, la llamada del método virtual generará mucho costo, más que el costo de la consulta de atributos. Deberíamos usar los métodos Get and Set cuando se llame a la subcontratación, pero cuando se llaman las llamadas internas, debemos llamarlo directamente.
29. Evite el uso de números de punto flotante.
30. La matriz de dos dimensiones ocupa más espacio de memoria que una matriz dimensional, que es aproximadamente 10 veces el cálculo.
31. La base de datos SQLite lee todos los datos de toda la tabla es rápido, pero la consulta condicional toma 30-50 ms.
Se espera que este artículo sea útil para el diseño del programa Java de todos.