viernes
mar022007
Rendimiento y el uso de String
viernes, marzo 2, 2007 at 11:10AM
No es un tema nuevo en absoluto, pero no está mal recordarlo.
Seguramente todos usamos extensivamente el operador + o += con objetos String, no haya nada malo en ello salvo que sean usadas en bucles repetidas veces. En esas ocasiones el uso de StringBuffer es menos bonito pero con mucho mayor rendimiento.
Haced la prueba comparando el tiempo de ejecución entre:
long start = System.currentTimeMillis();
String str = "";
for(int i = 0; i < 10000; i++)
str += i;
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
StringBuffer strb = new StringBuffer();
for(int i = 0; i < 10000; i++)
strb.append( i );
System.out.println(System.currentTimeMillis() - start);
La segunda opción es *miles* de veces más rápida.
La razón es porque el + y el += suponen la creación de al menos un objeto StringBuffer y la conversión de éste en un nuevo objeto String resultante de la expresión, es decir dos objetos como mínimo por iteración que además son mandados inmediatamente al garbage collector por no hablar de la perdida del objeto String previamente asignado al asignar el resultado de la expresión.
Seguramente todos usamos extensivamente el operador + o += con objetos String, no haya nada malo en ello salvo que sean usadas en bucles repetidas veces. En esas ocasiones el uso de StringBuffer es menos bonito pero con mucho mayor rendimiento.
Haced la prueba comparando el tiempo de ejecución entre:
long start = System.currentTimeMillis();
String str = "";
for(int i = 0; i < 10000; i++)
str += i;
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
StringBuffer strb = new StringBuffer();
for(int i = 0; i < 10000; i++)
strb.append( i );
System.out.println(System.currentTimeMillis() - start);
La segunda opción es *miles* de veces más rápida.
La razón es porque el + y el += suponen la creación de al menos un objeto StringBuffer y la conversión de éste en un nuevo objeto String resultante de la expresión, es decir dos objetos como mínimo por iteración que además son mandados inmediatamente al garbage collector por no hablar de la perdida del objeto String previamente asignado al asignar el resultado de la expresión.
in
j2se
j2se 
Reader Comments