3 Stimmen

Wie kann ich die Ausführungszeit dieser Schleife reduzieren (java)

Ich habe einen Code, dessen Ausführung ungewöhnlich lange zu dauern scheint. Ich muss die Ausführungsgeschwindigkeit so weit wie möglich reduzieren.

Im Wesentlichen tut der Code Folgendes. Ich erstelle ein Array von Objekten size[10][10][10]. Das Objekt enthält eine Liste von Zahlen wie folgt:

class MyClass{
  ArrayList<Integer> numberList;
      public MyClass(){
          numberList= new ArrayList <Integer> ();
      }
   }

      MyClass storage[][][] = new MyClass[10][10][10];

Ich habe dann den folgenden Code, der den Listen Zahlen hinzufügt

 for(int i =0; i < 200000;i++){
       for(int j = 0; j < 10; j++){
        for(int k = 0; k < 10; k++){
         for(int l = 0; l < 10; l++){            
                   storage[j][k][l].numberList.add(i);
         }
        }
       }
      }

Ich bin mir ziemlich sicher, dass der größte Teil der Ausführungszeit von der folgenden Zeile stammt

 storage[j][k][l].numberList.add(i);

Genauer gesagt ist es die Funktion .add(i) .

Ich bin ziemlich neu in Java, und bin nur vertraut in C++. Wenn ArrayList ist ähnlich wie eine Liste in C++, sicherlich Hinzufügen eines Elements am Ende erfordert sehr wenig CPU-Zeit? Liegt das nur daran, dass ich so viele Hinzufügungsoperationen durchführe (wahrscheinlich eine Million)?

Eine andere Sache, die ich fragen möchte, ist, ob ich dies durch die Verwendung von Threads beschleunigen kann (unter der Annahme eines Dual-Core-Prozessors mit 4 Threads). Ich denke, ich könnte 4 Threads erstellen, die jeweils einen 50.000 Chunk verarbeiten. Ich bin mir jedoch nicht sicher, was die Synchronisierung angeht. Vermutlich müsste ich eine Art gegenseitigen Ausschluss für storage[][][] haben. Muss ich Folgendes schreiben

synchronized(storage)

oder wäre das in Ordnung?

synchronized(storage[j][k][l])

Jede Hilfe ist sehr willkommen

Mit freundlichen Grüßen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X