Bei deiner Rechnung hieße das ja, das den Array 6+9+3 = 18 Elemente gespeichert werden können. Aber es ist ja ein mehrdimensionales Array.Achso, danke dir.
Genau so habe ich es auch gerechnet, aber bei den Arrays habe z.B. bei float array var5 -> 6*4+9*4+3*4 gerechnet, somit auf 72 Bytes gekommen.
float tictactoe[] = new float[3][3]
Kann gut sein, an der Stelle bin ich raus, weil sowas vielleicht für Zertifkate relevant sein mag, aber in der Praxis komplett irrrelevant ist. Müsste man die JLS mal durchsehenVerbraucht der Aufruf der Klasse auch Bytes? Hab irgendwas davon gelesen das der 4 Byte verbraucht, aber denke das habe ich falsch verstanden.
Grüße,
Also "Aufruf" ist auf jeden Fall das falsche Wort. Aber eine Klasse benötigt natürlich einen Overhead, denn es muss ja bekannt sein, was da gespeichert wird. https://shipilev.net/jvm/objects-inside-out/#_methodology_considerations könnte da interessant sein. Wirklich alles mal versuchen nachzuvollziehen. Für das Verständnis ist es wichtig. Object Size wäre dann unter 6.2 im Detail.Verbraucht der Aufruf der Klasse auch Bytes?
new int[10][20]
oder new int[20][10]
schreibst.Ja, das ist ein wichtiger Punkt. Ist auch einfach zu erklären: Es gibt keine mehrdimensionalen Arrays. Somit sind das Arrays von Arrays.Der Speicher-Overhead variiert in Java bei mehrdimensionalen Arrays, das heißt, dazu lässt sich keine Aussage treffen. In der JLS steht dazu auch nix.
Es kann auch einen unterschied machen, ob dunew int[10][20]
odernew int[20][10]
schreibst.
Es ist festgelegt, in welcher Reihenfolge die angelegt werden:Der Speicher-Overhead variiert in Java bei mehrdimensionalen Arrays, das heißt, dazu lässt sich keine Aussage treffen. In der JLS steht dazu auch nix.
Es kann auch einen unterschied machen, ob dunew int[10][20]
odernew int[20][10]
schreibst.
- First, the dimension expressions are evaluated, left-to-right. If any of the expression evaluations completes abruptly, the expressions to the right of it are not evaluated.
- Next, the values of the dimension expressions are checked. If the value of any DimExpr expression is less than zero, then a NegativeArraySizeException is thrown.
- Next, space is allocated for the new array. If there is insufficient space to allocate the array, evaluation of the array creation expression completes abruptly by throwing an OutOfMemoryError.
- Then, if a single DimExpr appears, a one-dimensional array is created of the specified length, and each component of the array is initialized to its default value (§4.12.5).
- Otherwise, if n DimExpr expressions appear, then array creation effectively executes a set of nested loops of depth n-1 to create the implied arrays of arrays.
Gar nicht, du bist nur auf eine Trollfrage hereingefallen.Mein Beileid und was dann die exakt richtige Antwort ist, bin ich raus
Da gibts keinen Unterschied zwischen Arrays und Objekten, der Speicherbedarf lässt sich (vorausgesetzt man kennt die JVM-Parameter) immer genau berechnen.Der Speicher-Overhead variiert in Java bei mehrdimensionalen Arrays, das heißt, dazu lässt sich keine Aussage treffen. In der JLS steht dazu auch nix.
Es kann auch einen unterschied machen, ob dunew int[10][20]
odernew int[20][10]
schreibst.
Diese Aussage ist unsinnig, da die "Parameter" von JVM implementation zu JVM implementation variieren.Da gibts keinen Unterschied zwischen Arrays und Objekten, der Speicherbedarf lässt sich (vorausgesetzt man kennt die JVM-Parameter) immer genau berechnen.
Nein, nicht zwischen verschiedenen Implementationen, sondern auch zwischen verschiednen Starts der gleichen Implementation.Diese Aussage ist unsinnig, da die "Parameter" von JVM implementation zu JVM implementation variieren.
Titel | Forum | Antworten | Datum | |
---|---|---|---|---|
S | Speicherbedarf Pixel vs. Polygon? | Java Basics - Anfänger-Themen | 7 | |
Java Speicherbedarf begrenzen? (Nicht Jar) | Java Basics - Anfänger-Themen | 3 |