1. El propósito de que hagamos esto:
1. Eficiencia (más importante)
2. Legabilidad, fácil de mantener en la etapa posterior. (También importante)
2. Requisitos para la optimización del código:
1. Reduzca el volumen del código.
2. Mejore la eficiencia de ejecución del código.
3. Optimización del código de uso común:
1. Intenta reutilizar objetos:
Especialmente la reutilización de objetos de cadena. El empalme de cadena más utilizado:
Al encontrar la limpieza frecuente de la cadena. Recuerde usar StringBuilder/StringBuffer
Por ejemplo:
ArrayList <String> List; /Guardar la inicialización de la lista. StringBuilder Builder = new StringBuilder ();
Razón: las máquinas virtuales Java no solo necesitan pasar tiempo generando objetos, sino que también necesitan pasar el tiempo procesando y reciclar objetos.
2. Use variables locales cuando sea posible:
Las variables locales se crean en la pila, y se crean rápidamente y desaparecen automáticamente después del uso, sin recolección de basura adicional.
Las variables estáticas, las variables de instancia, etc. se crean en el montón, y la velocidad de creación es lenta, y también se basa en el mecanismo de recolección de basura Java para procesar.
3. Cierre el flujo en el tiempo:
En el desarrollo del programa Java, después de completar las operaciones de E/S y base de datos, debe recordar cerrar el flujo.
Causa: no cerrar el flujo puede causar una gran sobrecarga al sistema e incluso puede tener graves consecuencias para los datos.
4. Use la carga perezosa
Carga perezosa: cree este objeto solo cuando se use.
Por ejemplo:
String prefix = "Gebi";
Reemplazar con:
if ("laowang" .equals (nombre)) {string prefix = "gebi";5. Evite usar intento ... atrapar en bucles, usar intento ... Captura fuera del bucle
6.try ... La captura no debería ser demasiado grande.
No ponga todo el código inútil, es decir, la excepción no se lanzará al Bloque de try ... Catch y reducirá el tamaño del Bloque de Código Prueba ... de captura.
Asegure la legibilidad, mantenimiento y robustez del código.
7. Intente evitar crear referencias a objetos dentro del bucle.
Especialmente cuando el volumen de circulación es grande.
while (i <1000) {objeto objeto = nuevo objeto ();Se recomienda modificarlo a:
Objeto objeto = nulo;
Cada vez que el nuevo objeto () es nuevo, el objeto de referencia del objeto apunta al objeto objeto.
Cuando hay muchos bucles, por ejemplo, el primer tipo, el JVM creará 1,000 referencias a los objetos, mientras que el segundo tipo solo tiene una referencia de objeto en la memoria. Esto ahorra mucho espacio en la memoria.
8. No use variables estáticas a voluntad.
Cuando un objeto se hace referencia por una variable declarada estática, el recolector de basura Java no limpiará la memoria del montón ocupada por el objeto.
La memoria del montón ocupada por la variable estática no se libera hasta el programa donde se encuentra la variable. Es decir, ciclo de vida de variable estática = ciclo de vida de clase.
9. No cree algunos objetos no utilizados y no importe algunas clases no utilizadas.
10. Use transmisiones de E/S tamponadas:
Las corrientes de E/S tamponadas pueden mejorar en gran medida la eficiencia de E/S. Bufferedwriter, BufferedReader, BufferedInputStream, BufferedOutputStream.
11. Convertir los datos de la clase de envoltura en cadenas para usar: ToString
Entero i = 1;
Ranking de velocidad de la conversión de métodos de datos de la clase de envoltorio a cadena:
I.ToString> String.ValueOf (i)> "" + I
12. Eficiencia transversal de MAP: EntrySet> Keyset
// EntrySet () for (Entry <String, String> Entry: MAP.EntrySet ()) {String Key = Entry.getKey (); : " + valor);} // Compare hacia arriba y hacia abajo // keySet () para (clave de cadena: map.keyset ()) {string value = map.get (key); system.out.println (clave +": " + valor);}13. Acerca de la Recolección Traversal de Iterator y Foreach ().
Introducción al algoritmo dice: los algoritmos están destinados a mejorar la eficiencia del espacio y la eficiencia del tiempo. Pero a menudo el tiempo y el espacio no pueden coexistir.
Eficiencia de tiempo: iterator> foreach ()
Realización de código: foreach ()> iterator
// iterator set <Entry <String, String >> EntrySet = MAP.EntrySet (); String> Entry = ITer.Next ();
contraste:
// foreach () for (Entry <String, String> Entry: MAP.EntrySet ()) {String Key = Entry.getKey (); : " + valor);}Personalmente, creo que se recomienda usar Iterator para atravesar la recopilación al procesar Big Data.
Sin embargo, para el procesamiento de datos pequeños, Foreach () todavía se usa para la legibilidad y el mantenimiento posterior.
Ambos deben dominarse al usarlos en combinación.