Ich muss ein x/y herumreichen. Ich habe gerade java.awt.Point benutzt. Ich mache das sehr viel, wenn man bedenkt, dass es die Art der App ist, aber viel langsamer als normale Arrays. Ich habe auch versucht, meinen eigenen "FastPoint" zu erstellen, der nur ein int x/y und sehr einfacher Klassenkonstruktor ist, der auch sehr langsam ist.Warum sind Punkte langsam
Die Zeit ist in Millisekunden.
java.awt.Point: 10374
Direkteingabe: 10032
Arrays: 1210
public class FastPoint {
public int x;
public int y;
public FastPoint(int x, int y) {
this.x = x;
this.y = y;
}
}
jvisualvm sagt Point (entweder AWT oder meine eigenen) sind Tonnen Speicher mit im Vergleich zu einfachen int [] array .
Ich denke, das ist nur Overhead von der Erstellung eines Objekts anstelle von einem um, Grundtyp? Gibt es eine Möglichkeit, diese Point-Klasse zu optimieren oder zu optimieren? Ich bin bereits auf basic int-Arrays umgestiegen (was jetzt viel schneller ist), versuche aber nur zu verstehen, warum das langsam ist und ob ich irgendetwas dagegen tun kann?
Testcode:
for (int i = 0; i < maxRuns; i++) {
point = new Point(i,i);
}
for (int i = 0; i < maxRuns; i++) {
a[0] = i; a[1] = i;
}
Ich glaube nicht, dass die Verwendung von Arrays anstelle von Objekten zu einer 900% -Zeitsteigerung führen würde. Zeit in ms -> aber um was zu tun? –
for (int i = 0; i < maxRuns; i++) { point = new Point(i,i); }
for (int i = 0; i < maxRuns; i++) { a[0] = i; a[1] = i; }
– dimeAuch, in Ihrer Array-Version, Sie sind nicht ** Instantiierung ** das Array. Die unterschiedlichen Kosten zwischen dem Erstellen von Objekten/Arrays und dem Zuordnen von Werten * zu * Elementen im selben Array sind * riesig *. –