Hi,
Hab mal wieder eine Verständnisfrage..
In der Javainsel (oder sagt man "auf" der Javainsel?) steht folgendes
über Arrays:
Zitat (von mir etwas umformatiert):
(1) Kann das jemand genauer erklären (in einfachen Worten). Mir ist ja klar,
wieviel Platz Arrays benötigen, lässt sich leicht rechnen. Aber hier bezieht
er sich ja auf Felder in Methoden..Brauchen die da mehr?
(2)Kostet die Zuweisung nicht IMMER Laufzeit, egal wo etwas deklariert wird?
Und die Indexprüfung findet doch auch immer statt, oder nicht?
Und wieso haben wir in einer Methode viele Zugriffe (Also mehr, als bei statischen Feldern, (siehe (4)) ) ?
(3) Habe ich nur der Vollständigkeit wegen mitkopiert.
(4) Meint er damit, daß sie statisch sein sollte, weil das Feld sonst bei jedem
Methodenaufrauf deklariert wird?
Dann könnte ich die Problematik ja verstehen...
Grüße
Udo
Hab mal wieder eine Verständnisfrage..
In der Javainsel (oder sagt man "auf" der Javainsel?) steht folgendes
über Arrays:
Zitat (von mir etwas umformatiert):
So, hier meine Fragen:Die Wahrheit über die Array-Initialisierung
So schön die kompakte Initialisierung der Feldelemente ist, so laufzeit- und
speicherintensiv ist sie auch. Da Java eine dynamische Sprache ist, passt das
Konzept der Array-Initialisierung nicht ganz in das Bild. Daher wird die Initialisierung
auch erst zur Laufzeit durchgeführt. Unser Primzahlfeld
wird vom Java-Compiler umgeformt und analog zu Folgendem behandelt:int[] primes = { 2, 3, 5, 7, 11, 13 };
(1)Erst nach kurzem Überlegen wird das Ausmaß sichtbar: Zunächst ist es derint[] primes = new int[ 6 ];
primes[ 0 ] = 2;
primes[ 1 ] = 3;
primes[ 2 ] = 5;
primes[ 3 ] = 7;
primes[ 4 ] = 11;
primes[ 5 ] = 13;
Speicherbedarf für die Methoden.
(2)Ist das Feld primes in einer Methode deklariert und mit Werten initialisiert, kostet
die Zuweisung Laufzeit, da wir viele Zugriffe haben, die auch alle schön durch die
Index-Überprüfung gesichert sind.
(3)Da zudem der Bytecode für eine einzelne Methode wegen diverser Beschränkungen
in der JVM nur beschränkt lang sein darf, kann dieser Platz für richtig große Arrays
schnell erschöpft sein. Daher ist davon abzuraten, etwa Bilder oder große Tabellen im
Programmcode zu speichern.
...
..
(4) Tip, Falls doch große Arrays benötigt werden:
Wir verwenden ein statisches Feld (eine Klassenvariable), sodass das Array
nur einmal während des Programmlaufs initialisiert werden muss.
(1) Kann das jemand genauer erklären (in einfachen Worten). Mir ist ja klar,
wieviel Platz Arrays benötigen, lässt sich leicht rechnen. Aber hier bezieht
er sich ja auf Felder in Methoden..Brauchen die da mehr?
(2)Kostet die Zuweisung nicht IMMER Laufzeit, egal wo etwas deklariert wird?
Und die Indexprüfung findet doch auch immer statt, oder nicht?
Und wieso haben wir in einer Methode viele Zugriffe (Also mehr, als bei statischen Feldern, (siehe (4)) ) ?
(3) Habe ich nur der Vollständigkeit wegen mitkopiert.
(4) Meint er damit, daß sie statisch sein sollte, weil das Feld sonst bei jedem
Methodenaufrauf deklariert wird?
Dann könnte ich die Problematik ja verstehen...
Grüße
Udo