|
The Java Specialists' Newsletter
Issue 070b 2003-05-18
Category:
Performance
Java version: Multi-Dimensional Arrays - Creation Performanceby Dr. Heinz M. Kabutz
Special Thank You!
I would like to thank Rafael Steil from the Grupo de Usuarios
Java - GUJ, from Brazil for translating our newsletters into Portuguese. In addition, I would like to
thank Vanessa Sabino for assisting Rafael in the translation work.
Disclaimer: Since I do not know any Portuguese, I make no warranty for the
accuracy of the translation. Heinz
Um de nossos assinantes, Martin Schulte, da Alemanha, enviou
uma correção para a última newsletter, e eu não gostaria de
esperar muito tempo para publicar a correção, uma vez que é
bem significante.
Martin descobriu que a maior diferença na performance é na criação de
arrays multi-dimensionais. Mark Grand também pensou que eu deveria retificar
que não há arrays multi-dimensionais no Java, somente arrays de arrays.
Esta é a razão que temos uma diferença na performance quando criamos
tais arrays de arrays
A diferença no tempo de criação pode ser vista no pequeno exemplo abaixo. Deixei
sem o sintax highlighting para ver a sua reação ;-)
public class CreationTimes {
private final static int ITERATIONS = 1000000;
private final static int NUM_BINS = 20;
private final static int THE_OTHER_DIM = 4;
public static void main(String[] args) {
testMultiArray();
testMultiArray2();
testSingleArray();
}
private static void testMultiArray() {
long time = -System.currentTimeMillis();
for (int repeat = 0; repeat < ITERATIONS; repeat++) {
int[][] aTwoDim = new int[NUM_BINS][THE_OTHER_DIM];
}
time += System.currentTimeMillis();
System.out.println("Tempo necessário para [][" + THE_OTHER_DIM + "] - " +
time);
}
private static void testMultiArray2() {
long time = -System.currentTimeMillis();
for (int repeat = 0; repeat < ITERATIONS; repeat++) {
int[][] aTwoDim = new int[THE_OTHER_DIM][NUM_BINS];
}
time += System.currentTimeMillis();
System.out.println("Tempo necessário para [" + THE_OTHER_DIM + "][] - " +
time);
}
private static void testSingleArray() {
long time = -System.currentTimeMillis();
for (int repeat = 0; repeat < ITERATIONS; repeat++) {
int[] aOneDim = new int[NUM_BINS * THE_OTHER_DIM];
}
time += System.currentTimeMillis();
System.out.println("Tempo necessário para [] - " + time);
}
}
O resultado the rodar este código é o seguinte:
Tempo necessário para [][4] - 9653
Tempo necessário para [4][] - 2394
Tempo necessário para [] - 671
Mudando um pouco de assunto, eu irei entrar para um grupo de elite
de autores no Bill Venners' Weblogs. Outros da lista são realmente
famosos, então eu estou lá para balancear um pouco :-). Dê uma olhada
no site da Artima em http://www.artima.com. Provavelmente
estarei por lá por uma semna mais ou menos. Também planejo usar o fórum deles
como um suplemento para a newsletter, e isso lhe dará uma oportunidade para
conversar online, via chat, publicamente.
Atenciosamente,
Heinz
Performance Articles
Related Java Course
Discuss at The Java Specialist Club
|