Belegt "null" Speicher?

P

Patneu

Gast
Hallo zusammen,

ich weiß nicht ob die Frage schonmal gestellt wurde, wenn ja habe ich sie nicht finden können.

Meine Frage ist, ob / wie viel Speicher (heap space - was stellt man sich darunter eigentlich genau vor?) eine Referenz auf "null" benötigt (abgesehen vom Bezeichner der Variablen etc.)?

Hintergrund der Frage ist, dass ich in einem Programm ein int-Array habe, welches ziemlich groß ist, wobei die Größe vom Benutzer festgelegt wird. Es ist ein zweidimensionales Array, wobei die Größe der ersten Dimension nach oben offen ist (aber vermutlich nicht höher als 100 liegen wird) und die zweite Dimension maximal 9999 Felder hat.

Problematisch dabei ist, dass viele (eigentlich die meisten) Felder des Arrays wahrscheinlich "leer bleiben" werden. Nun habe ich bei der bisherigen Recherche im Forum gelesen, dass int-Werte prinzipiell erstmal "0" sind, wenn ihnen kein anderer Wert zugewiesen wird. Da eine 0 ja den selben Speicher verbraucht, wie jeder andere int-Wert, ist das natürlich, wenn die meisten Felder gar keinen Wert haben müss(t)en, sehr unpraktisch.

Deshalb habe ich überlegt, anstatt eines int-Array ein Integer-Array zu verwenden, da die nicht benötigten Felder dann auf "null" verweisen könn(t)en. Wie ich das verstanden habe, sollten sie das standard-mäßig auch tun?



Meine Frage ist also im Prinzip: Bringt das etwas bzw. das, was ich mir davon erhoffe? Spare ich so wirklich Speicher und wenn ja, wie viel?
Und falls mir das nichts bringen sollte: Wie könnte ich hier sonst Speicher gewinnen? Oder muss ich zwingend den Speicher erhöhen?

Danke schon im Voraus für alle antworten. =)
 
P

Patneu

Gast
Wenn es nur so einfach wäre... *seufz*

Leider ist es so, dass allen Feldern des Arrays prinzipiell Werte zugewiesen werden könnten, das hängt von den Eingaben des Benutzers ab. Praktisch wird aber meist nur ein sehr geringer Anteil der Felder Verwendung finden - das werden aber immer unterschiedliche Felder sein.

Bis jetzt ist mir leider noch keine brillante Idee gekommen, wie ich das anders lösen könnte, deshalb hatte ich gehofft, ich könnte irgendwie den Speicherbedarf reduzieren. Aber wenn das nicht möglich ist, heißt es wohl wieder: Zurück ans Zeichenbrett.
 
P

Patneu

Gast
HashMap hatte ich mir bis jetzt noch gar nicht angeschaut. Habe das grade mal kurz überflogen und sieht tatsächlich so aus, als könnte es das sein, was ich suche. =) Muss mich da mal genauer reinlesen, auf jeden Fall schonmal danke für die Hilfe.
 
T

thorstennn

Gast
HashMap hat alle Vorteile von Arrays und minimiert gleichzeitig deren Nachteile - es ist die masterLoesung - ich würde davon abraten
 

faetzminator

Gesperrter Benutzer
Ganz abgesehen von den Lösungsvorschlägen der anderen, hier noch eine direkte Antwort auf deine Frage.
Eine Referenz auf [c]null[/c] ist genau gleich wie eine auf ein existierendes Objekt. Ein int benötigt 4 Bytes (32bit), eine Referenz je nach Implementierung mehr oder weniger Speicher. IMHO ist dies bei den Sun JVMs bei 32bit Systemen (logischerweise) 32bit und bei 64bit Systemen dementsprechend 64bit.
 

Empire Phoenix

Top Contributor
Also erstmal solltest dud ir überlegen was du brachst:

Einige hundert x,y Korrdianen denen ein int zugeweisen ist.
Damit wäre die primitive lösung erstmal eine ArrayList mit XYInteger elementen
class XYInteger{
public int x;
public int y;
public int value;
}
dies spart schonmal allen platz den die nullen brauchen.
Nachteil beim zugriff auf ein bestimmtes Element müssen alle vorhandenen durchsucht werden, bis man das richtige findet.
-> Indexstructur
-> array aus x Hashmaps ( X weil x <= 100 und y<=9999 laut afugabe)
-> diese hashmaps leer lassen solange keine Daten eingetragen werden.
-> du brauchst nur add, get (und evtl remove)
Java:
public void add(int x,int y, int value){
yhashmap = xhashmap.get(x)
if(yhashmap == null){
yhashmap = new HAshmap();
xhasmap.put(x,yhashmap);
}
yhashmap.put(y,value);
}

public int get(x,y){
yhasmap = xhashmap.get(x)
if(yhashmap == null){
return 0;
}
return yhashmap.get(y);
}

Ungefähr so. jetzt bei bedarf noch ne clear funktion einbauen, die die XHasmap cleart, sowie die typen bei den hasmaps angeben,
und das alles in eine Klasse packen, dass du nicht direkt auf den hasmaps arbeiten musst,(und bei bedarf die unterliegende implementierung weiter anpassen kannst ohne das programm zu verändern)

Bei remove würde man die yhasmap suchen den wert killen, dann prüfen ob mehr als 0 drinnen sind, wenn nciht die yshamap aus der xhashmap killen
 
Zuletzt bearbeitet:

fastjack

Top Contributor
thorstenthor hat gesagt.:
Es geht doch darum, etwas zu lernen, von daher greift man nicht zur Fertiglösung, sondern beschränkt sich vorerst erst mal nur auf Felder und Listen! Nur so kommt man weiter.

Hier steht nix davon das er noch lernen will, er beschreibt ein Problem und dessen Lösung ist nun mal der Einsatz einer Map, die ja wohl auch zu den Grunddatenstrukturen gehört.

thorstenthor hat gesagt.:
Was hast du denn geraucht?

EmpirePhoenix gibt wenigstens Vorschläge, was man bei deinen Beiträgen vermißt (wenn Du vorher thorstennn warst).
 
P

Patneu

Gast
Also ich würde nie so vermessen sein, zu denken, ich müsste nichts mehr lernen. Ich habe bisher 100%ig erst einen winzigen Ausschnitt dessen gesehen, was Java so alles kann. ;)

Unter anderem ist das auch der Grund, warum ich mit Arrays zu arbeiten versucht habe und nicht mit Hashmaps. Ich wusste schlicht nicht, dass es die überhaupt gibt und dass sie sich für mein Problem eignen könnten.

Nach allem, was ich mir nun darüber angelesen habe, scheinen mir Hashmaps ideal um mein Speicher-Problem zu lösen, insbesondere, da ich auch noch weitere solcher "Verzeichnisse" brauchen werde, die aller Wahrscheinlichkeit noch mehr Dimensionen und/oder potenzielle Felder haben werden.

Das einzige, was mir noch nicht ganz klar ist, ist ob es nötig sein wird, die Hashmaps zu synchronisieren und wie genau man das macht. Es wird ja ausdrücklich empfohlen, wenn mehrere "Threads" auf die Hashmap zugreifen. Was genau versteht man aber unter einem Thread? Muss ich die Hashmap bereits synchronisieren, wenn mehrere Methoden darauf zugreifen können oder nur dann, wenn mehrere Instanzen des Programms darauf zugreifen?
 

Landei

Top Contributor
Mit Threads kommst du nur in Berührung, wenn du selbst damit anfängst, oder hin und wieder bei grafischen Oberflächen wie Swing (wo die Threading-Probleme meistens leicht zu lösen sind), also mache dir darüber erst mal keinen Kopf.
 

thorstenthor

Bekanntes Mitglied
Und wenn dann verwendeste eben java.util.Collections.html#synchronizedMap(java.util.Map)

Aber die Wurzel allen Übels liegt bei der Optimierung von Programmen

Anders als fastjack würde ich nicht behaupten, HashMap gehöre zu den "Grunddatenstruckturen - mit kleinen Schritten kommst du eher zum Ziel
 

faetzminator

Gesperrter Benutzer
Anders als fastjack würde ich nicht behaupten, HashMap gehöre zu den "Grunddatenstruckturen [..]

Arrays sollte man am Besten - sobald man .lenth und [index] kennt - in den Wind schiessen, ausser man muss eine neue Collection bauen.

Zweitens denke ich, dass man alle Collections (List, Set, Queue, ...) kennen und diese auch einsetzen sollte. Warum das Rad neu erfinden? Wenn man sich für die Logik dahinter interessiert, muss man die Klasse nicht nachbauen, sondern kann einfach im Source (von J2SE) nachschauen.
 

fastjack

Top Contributor
Datenstruktur ? Wikipedia

@thorstenthor unter "Grundlegende Datenstrukturen" kannst Du nachlesen, was man so im Allgemeinen kennen sollte, eben die Basics.

@PatNeu natürlich sollst Du lernen ;) Die Map ist aber nun mal die beste Lösung für Dein Problem, ob Du Dir sie jetzt selbst baust oder eine vorhandene nutzt (Map ist auch nur das Interface).
 
T

thorstennn

Gast
Arrays sollte man am Besten - sobald man .lenth und [index] kennt - in den Wind schiessen, ausser man muss eine neue Collection bauen.

ich denken, man kann sagen, weit mehr als die Hälfte anderer Datenstruckturen beruhen auf Feldern. Solch Essentielles zu vernachlässigen wäre für mich nicht der richtige Weg.

Datenstruktur ? Wikipedia

@thorstenthor unter "Grundlegende Datenstrukturen" kannst Du nachlesen, was man so im Allgemeinen kennen sollte, eben die Basics.

Grunddatenstrucktur finde ich dort gar nicht, hast du dir das etwa ausgedacht? Oder kombinierst du gerade irgendwelche Fachbegriffe, die du mal in einer Vorlesung gehört hast, neu? Jedenfalls ist deine Argumention für mich nicht überzeugend.
 

faetzminator

Gesperrter Benutzer
ich denken, man kann sagen, weit mehr als die Hälfte anderer Datenstruckturen beruhen auf Feldern. Solch Essentielles zu vernachlässigen wäre für mich nicht der richtige Weg.

Arrays in Java sind zwar insofern essentiell, dass eben diese Typen darauf beruhen. Aber wenn du etwas Erfahrung hast, dann weisst du genau so gut wie ich, dass die Integration von Arrays (bzw. der Umgang mit dessen) in Java einfach sche*sse ist. Als Beispiele wären da Autoboxing und Generics zu nennen...
 
T

Tomate_Salat

Gast
Es wird ja ausdrücklich empfohlen, wenn mehrere "Threads" auf die Hashmap zugreifen. Was genau versteht man aber unter einem Thread? Muss ich die Hashmap bereits synchronisieren, wenn mehrere Methoden darauf zugreifen können?

Ergänzend zu dem gesagten: Ein Thread kann nicht mehrere Methoden gleichzeitig ausführen, dafür bräuchtest du schon 2..* . Solange du keine eigenen Threads erstellst, bist du i.d.R auf der sicheren Seite (auch wenn eine GUI im Spiel ist)

... zu Thorsten* brauche ich nichts zu sagen. Wie sinnvoll sein Vorschlag der eigenen Implementierung ist, sieht man schon daran, dass er mit der Meinung anscheinend komplett alleine steht.
 
T

thorstennn

Gast
... zu Thorsten* brauche ich nichts zu sagen. Wie sinnvoll sein Vorschlag der eigenen Implementierung ist, sieht man schon daran, dass er mit der Meinung anscheinend komplett alleine steht.

ROFL Welcher Vorschlag? Ich hab lediglich gesagt, welche Lernstrategie am ehesten zum Erfolg führt. Das Reininterpretierte von dir kann mir sicher keiner als Fehler anrechnen. Wäre ja noch schöner :D

Im Übrigen ist man bei der GUI-Programmierung schnell in dem Fall, 2..* Threads zu haben. Aber ach was - mit nem Pubertierling zu argumentieren bringt eh nichts :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
J Prüfen ob Arrays nur mit einem Wert belegt sind Java Basics - Anfänger-Themen 3
L Wieviel Platz belegt Java standardmäßig im Arbeitsspeicher? Java Basics - Anfänger-Themen 4
T Feststellen wie viel Arbeitsspeicher belegt ist Java Basics - Anfänger-Themen 2
S Testen ob ein Char Array noch nicht belegt ist! Java Basics - Anfänger-Themen 3
J Bestimmte Stelle im Array die belegt ist wieder freigeben. Java Basics - Anfänger-Themen 3
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
P Buffer und null Java Basics - Anfänger-Themen 3
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
N null in String replacen Java Basics - Anfänger-Themen 16
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
K Bufread.readLine())!= null wie beenden? Java Basics - Anfänger-Themen 4
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
T ComboBox getValue() zeigt null Java Basics - Anfänger-Themen 7
J null exception Array Java Basics - Anfänger-Themen 5
tobikoch String x= null Bedeutung Java Basics - Anfänger-Themen 9
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
C Array-Eintrag wieder auf Null setzen Java Basics - Anfänger-Themen 3
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
O JavaArray Null Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
D Best Practice Konvention - Klassenmembers auf null setzen? Java Basics - Anfänger-Themen 2
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
I Polymorphie Null Objekt Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
C Null Pointer Exception Java Basics - Anfänger-Themen 10
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
V String Array gegen null-Eintrag sichern Java Basics - Anfänger-Themen 11
G Null Pointer Exception Java Basics - Anfänger-Themen 4
R Gleitkommazahlen ohne führende Null Java Basics - Anfänger-Themen 10
M array = null Java Basics - Anfänger-Themen 2
F String equals NULL Problem Java Basics - Anfänger-Themen 4
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
R Property Value als null setzen Java Basics - Anfänger-Themen 1
D Arrays.toString spuckt null aus? Java Basics - Anfänger-Themen 3
T Compiler-Fehler Null type safety (type annotations) Java Basics - Anfänger-Themen 5
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
J Fehlerhafte Ausgabe "null" Java Basics - Anfänger-Themen 2
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
W Input/Output DataOutputStream gibt NULL zurück Java Basics - Anfänger-Themen 5
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
D Null Ausgabe obwohl wert zugewiesen Java Basics - Anfänger-Themen 5
J Alias null Java Basics - Anfänger-Themen 4
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3
A null-Überprüfung Java Basics - Anfänger-Themen 24
O Methode gibt Null zurück Java Basics - Anfänger-Themen 7
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
T Null Java Basics - Anfänger-Themen 3
X Array trotz Befüllung "null" Java Basics - Anfänger-Themen 11
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
M Input/Output File.listFiles() gibt null zurück Java Basics - Anfänger-Themen 3
M Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte Java Basics - Anfänger-Themen 11
J Verschränkte Rekursion und null Ahnung... Java Basics - Anfänger-Themen 0
X Vererbung Setzen auf Null bei Subklassen Java Basics - Anfänger-Themen 2
S Rückgabewert null in Methode mit Thread Java Basics - Anfänger-Themen 2
C MIME-Type null Java Basics - Anfänger-Themen 4
T Null Pointer Exception Java Basics - Anfänger-Themen 4
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
M Konstruktor auf null prüfen, Arrays Java Basics - Anfänger-Themen 9
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
N 'null' aus String löschen Java Basics - Anfänger-Themen 7
F Irgendein "Null" Fehler.... Java Basics - Anfänger-Themen 5
P Map liefert bei put null als Ergebnis Java Basics - Anfänger-Themen 6
M Interface Das Null-Layout Java Basics - Anfänger-Themen 12
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
Dogge NumberFormatException null Java Basics - Anfänger-Themen 5
C 2 Objekte, 1 immer Null? Java Basics - Anfänger-Themen 8
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben