Speichereffizient programmieren

davidh38

Bekanntes Mitglied
Hi Javafans,

ich will dafür sorgen, dass es nicht so schnell zu einem Java Heap Error kommt.
Angenommen eine Liste ist als Datentyp gut geeignet. Wie kann ich das umgehen, da ja eine Liste aus Objekten und nicht aus primitiven Datentyp besteht. Ich kann auf der anderen Seite auch keine Arrays statt der Liste nehmen, weil eine Element aus dem Array rausnehmen einfach langsam wegen des umkopieren dauert. Wer kann mir helfen?
 

njans

Top Contributor
Also das hängt davon ab, in welchem Kontext sich die Liste befindet. Was genau hast du da drinne? Ist es wichtig, in welcher Reihenfolge die Elemente sind? HashSets und HastMaps sind deutlich schneller im Zugriff.
 

Ark

Top Contributor
HashSets und HastMaps sind deutlich schneller im Zugriff.
Schnellerer Zugriff geht nicht selten mit noch mehr Speicherverbrauch einher (was bei HashIrgendwas nämlich immer der Fall ist).

@davidh38: Du musst schon mehr Code zeigen bzw. die Problemstelle nach Möglichkeit eingrenzen. "Einfach so" kann man nicht optimieren bzw. verbessern, weder im Speicher- noch im Zeitverbrauch.

Ark
 

hdi

Top Contributor
ich will dafür sorgen, dass es nicht so schnell zu einem Java Heap Error kommt.
Veraltete Daten aus der Liste raushauen. Wenn es keine "veralteten" (nicht mehr gebrauchte) Daten gibt, hilft wohl nur auf die Platte rausschreiben, und bei Bedarf wieder einlesen. D.h. immer nur gewisse Teile der Daten im Hauptspeicher halten. Ansonsten kann man da nichts tun - wenn dein Programm nun mal soviel Daten verarbeitet, dann ist das halt so.

edit: Natürlich kannst du auch erstmal der JVM mehr Speicher zuweisen:
-Xmx1024m (1 GB, Standard sind glaube ich nur 128 MB)
 

Asgar13

Bekanntes Mitglied
Veraltete Daten aus der Liste raushauen. Wenn es keine "veralteten" (nicht mehr gebrauchte) Daten gibt, hilft wohl nur auf die Platte rausschreiben, und bei Bedarf wieder einlesen. D.h. immer nur gewisse Teile der Daten im Hauptspeicher halten. Ansonsten kann man da nichts tun - wenn dein Programm nun mal soviel Daten verarbeitet, dann ist das halt so.

edit: Natürlich kannst du auch erstmal der JVM mehr Speicher zuweisen:
-Xmx1024m (1 GB, Standard sind glaube ich nur 128 MB)

:) Stimme voll und ganz zu.

z.B. zu jedem
Code:
HashMap.put
gehört auch ein
Code:
HashMap.remove
oder auch jeden Thread, den du nicht mehr brauchst den Inhalt auf
Code:
null
setzen, so werden die Sachen auch vom gcc weggeräumt.
 
S

SlaterB

Gast
Angenommen eine Liste ist als Datentyp gut geeignet.
[..]
Ich kann auf der anderen Seite auch keine Arrays statt der Liste nehmen, weil eine Element aus dem Array rausnehmen einfach langsam wegen des umkopieren dauert.
im Falle einer ArrayList passiert das sowieso,
Alternative ist LinkedList, die neu zu programmieren gehört eh zu den Grundaufgaben,
könntest du schnell auch für primitive Datentypen neu machen, aber der eine Wrapper macht da nicht wirklich viel aus wenn die LinkedList-Konstruktion selber einigen Bedarf pro Element hat..

viele primitive Datentypen können absolut nur per Array effizient gespeichert werden, etwa 1000x 8 Bytes wirklich in ca. 8000 Bytes,

bei aller anderen Art der Speicherung sollte der Einzelbedarf nicht zu wichtig sein,
grob großzügig überschlagen kannst du gleich immer von 100 Bytes für die 8 primitiven ausgehen


wenn Speicherplatz so wichtig ist, dann sind es die Arrays, dann sollte auch mit dem Zeitaufwand für die Neustrukturierung gelebt werden können

ein kleiner Strohhalm ist noch eine Mischung aus Arrays und mehr Struktur,
für ~1 Mio. Einträge vielleicht nicht nur ein Array mit aufwendigen Kopieren, sondern 1000 1000er Arrays,
die vielleicht zum Teil leer sind, nur zu bestimmten Zeiten neu befüllt werden,
dazu ein Index, welche Daten (etwa sortiert) wo zu finden ist, Details hängen von den Ansprüchen an die Datenstruktur ab,

jedenfalls wäre es denkbar mit etwas mehr Platz (nicht gleich 100-1000% wie bei LinkedList/ HashMap, sondern nur 1-20%)
die notwendige Arbeit deutlich zu verringern/ die Suchgeschwindigkeit dramatisch zu verbessern gegenüber puren Array
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
nein, denn der allokierte Speicher steigt erst im Programmverlauf,
totalMemory() - freeMemory()
ist immer der entscheidende Wert, nun steht es mal wieder da, kann ich mir nie merken, aber muss ja auch nur einmal in eine Hilfsmethode
 

Landei

Top Contributor
viele primitive Datentypen können absolut nur per Array effizient gespeichert werden, etwa 1000x 8 Bytes wirklich in ca. 8000 Bytes,

bei aller anderen Art der Speicherung sollte der Einzelbedarf nicht zu wichtig sein,
grob großzügig überschlagen kannst du gleich immer von 100 Bytes für die 8 primitiven ausgehen

Ich denke, dass z.B. Gnu Trove etwas schonender mit dem Platz umgeht :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A GUI bequemer programmieren? Java Basics - Anfänger-Themen 6
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
V Zeichenkette programmieren Java Basics - Anfänger-Themen 20
O Fenster programmieren Java Basics - Anfänger-Themen 2
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
A Programmieren lernen Java Basics - Anfänger-Themen 28
F ArrayListe manuell programmieren? Java Basics - Anfänger-Themen 24
X Erste Schritte Einstieg ins Programmieren Java Java Basics - Anfänger-Themen 2
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
Ellachen55 Weihnachtsbaum in Eclipse programmieren Java Basics - Anfänger-Themen 6
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
S Dreieckssignal programmieren Java Basics - Anfänger-Themen 5
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
M Spiel programmieren Java Basics - Anfänger-Themen 16
A Fenster programmieren Java Basics - Anfänger-Themen 1
V OOP Kassensystem objektorientiert programmieren Java Basics - Anfänger-Themen 15
A Erste Schritte DoodleJump programmieren: Kollisionsabfrage Java Basics - Anfänger-Themen 4
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
G Rekursives Programmieren --> harmonische Reihe Java Basics - Anfänger-Themen 3
A Endlich anfangen mit Programmieren ! Java Basics - Anfänger-Themen 8
L Karawane programmieren Java Basics - Anfänger-Themen 0
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
steven789hjk543 Erste Schritte java programmieren/ Schritt für Schritt Java Basics - Anfänger-Themen 14
I Spiel programmieren. Java Basics - Anfänger-Themen 16
H [Studium] Mäxchenspiel programmieren Java Basics - Anfänger-Themen 10
C BlueJ Zahlenschloss programmieren Java Basics - Anfänger-Themen 5
steven789hjk543 mit dem Smartphone java programmieren Java Basics - Anfänger-Themen 44
F Okjektorientiert programmieren Java Basics - Anfänger-Themen 2
S OOP Ticketsystem programmieren Java Basics - Anfänger-Themen 6
P Selber Programmieren lernen oder Uni? Java Basics - Anfänger-Themen 12
P Kasse programmieren Java Basics - Anfänger-Themen 12
D Timer programmieren Java Basics - Anfänger-Themen 13

Ähnliche Java Themen


Oben