Problematik großer Objekt-Erstellung / -Löschung

Luk10

Top Contributor
Grüße,

ich arbeite im Moment mit 3D-Vektor Objekten die je aus 3 floats (x, y, z) bestehen. Im Zuge von Berechnungen müssen Methoden wie distanceToPlane(...) distanceToLine(...) und distanceToPoint(...) im Bereich von ~1000 mal pro Frame aufgerufen werden.

Ich habe jetzt die Wahl diese Methoden "schön" zu schreiben, also neue Vektor-Objekte zu erstellen oder es nicht so "schön" zu schreiben und nur floats für zwischen Ergebnisse etc. zu verwenden.
Meine Frage ist nun wie Speicher / Performance Intensiv es ist pro Frame x * 1000 neue Objekte zu erstellen und direkt danach wieder einzustampfen. Wie sehr unterscheidet es sich von x * 3 * 1000 floats zu allokieren und wieder freizugeben?
Ab welchem Punkt ist der "Overhead" des Objekts (GC) zu den floats signifikant?

Ich hab leider zu wenig Kenntnisse um meine eigenen Benchmarks zu erstellen bzw. kenne mich nicht besonders gut mit Profilern aus.
 
nun ... ein objekt das mehrere primtive datentypen kapselt braucht in der regel etwas mehr speicher und ist meist auch ein bisschen langsamer / rechenintensiver da halt auf dem stack n bissl mehr passiert ...

aber grundsätzlich dürfte das problem eher die hohe anzahl sein ... denn selbst wenn man nach jedem call "System.gc()" callt und so den GC mal "darum bittet demnächst mal seine arbeit zu verrichten" gibt es irgenwo den punkt wo man das system schneller zuschaufelt als der GC freiräumen kann ...

du solltest also erstmal versuchen die anzahl zu verringern und auch die datenmenge klein zu halten ... wenn du das alles "minimalisiert" hast kann man weiter drüber reden
 
> distanceToPlane(...) distanceToLine(...) und distanceToPoint(...)

Das reicht nach statischen Methoden. Da muss ja nichts speichermäßig aufbewahrt werden.

Das Anlegen von Objekten ist übrigens nicht besonders langsam, Speicher allozieren geht schnell. Teigig wird es, wenn der GC zuschlagen muss. Dass kann dann ein paar Sekunden Pause geben, je nach Speicherausbau.
 

Zurück
Oben