Java Specialists' Java Training Europehome of the java specialists' newsletter

The Java Specialists' Newsletter
Issue 070b2003-05-18 Category: Performance Java version:

Subscribe Free RSS Feed

Multi-Dimensional Arrays - Creation Performance

by 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

    
Your Name

Your E-Mail

Your Phone

Your Company

Your Comment


Java Master
Java Concurrency
Design Patterns
In-House Courses



© 2010 Heinz Kabutz - All Rights Reserved Sitemap seo web design Catch22 Marketing
Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. JavaSpecialists.eu is not connected to Oracle, Inc. and is not sponsored by Oracle, Inc.