Showing posts with label performance. Show all posts
Showing posts with label performance. Show all posts

Copia de Arreglos

Los arreglos son una forma importante de salvar datos. En caso de que tengamos que realizar una copia de arreglos podemos realizarlo de esta manera.

public class Copy(){  
int[] array = new int[55555];
}

public int[] copyArray(){
int[] arrayCopy = new int[array.length];
for( int i = 0; i < array.length; i++ )
arrayCopy[i] = array[i];
return arrayCopy;
}


Para cada posición copiamos el valor de un arreglo al otro, esta es una manera pero existe una mejor y más sencilla. Para eso revisaremos la documentación ( API documentation ); Existe en la clase System un método llamado arraycopy.

public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length)

Este método es nativo, por lo que la copia se hará en segmento de memoria haciendola más rápida. Este método nos da la posibilidad de copiar también segmentos del arreglo original.

System.arraycopy(array, 5, array, 0, array.length-5);

Copiando desde la posición 5 del arreglo

Bibliography:

Dactonta, Michael C; Monk, Eric; Keller Paul, Java Pitfalls, Wiley 2000;


Crear un cronómetro

Java es uno de los lenguajes de programación más utilizados o por lo menos de los mas famosos. Una de sus debilidades es la velocidad de ejecución (que ha ido mejorandose) y el consumo de memoria RAM,

Para poder realizar los famosos "benchmarks" lo que podemos medir es el tiempo de ejecución, esto lo podemos realizar a través de una clase que simulará un cronómetro.

public class Stopwatch {
private long startTime = -1;
private long stopTime = -1;
private boolean running = false;

public Stopwatch start(){
startTime = System.currentTimeMillis();
running = true;
return this;
}

public Stopwatch stop(){
stopTime = System.currentTimeMillis();
running = false;
return this;
}

public Stopwatch reset(){
startTime = -1;
stopTime = -1;
running = false;
return this;
}

public long getElapsedTime(){
if(startTime == -1)
return 0;
else if(running)
return System.currentTimeMillis() - startTime;
else
return stopTime - startTime;
}
}


Para poder utilizar esta clase sólo debemos crear una instancia, y llamar a los métodos necesarios.

Ejemplo:


public static void main(String[] args){
Stopwatch timer = new Stopwatch().start();
long total = 0;
for(int i = 0; i Integer.MAX_VALUE; i++){
total +=i;
}
System.out.println(timer.getElapsedTime());
}