Große Daten und große Array

fatfox

Bekanntes Mitglied
Hallo Leute,

Ich arbeite jetzt mit ziemlich große Daten. Ich möchte eine riesen Array erzeugen, so "int[][] bigdata = new int[17770][17770];", Aber mein Computer report immer Fehler: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Ich denke, die Array kostet zu viel Speicher, deshalb lehnt der Computer ab zu arbeiten.

Weiß jemand, wie man mit große Array arbeiten kann?

Vielen Dank für die Bemühung!
 

XHelp

Top Contributor
Kommt drauf an... Entweder dein heap space vergrößern, damit java mehr Speicher zur verfügung hat, oder Algo optimieren (falls möglich), oder sowas wie Paging implemetieren (auch falls möglich)... Die letzten Punkte hängen aber direkt mit der Aufgabenstellung zusammen.
 

oetzi

Bekanntes Mitglied
Hallo fatfox,

hab zwar noch keine eigenen Erfahrungen mit solch großen Arrays gemacht, aber den Heap Space, den deine Javaanwendung zur Verfügung gestellt wird, kannst du mit den Parametern
-Xms512m
-Xmx1024m
hochsetzen.
 

Michael...

Top Contributor
Man kann den Heap Space erhöhen.
Allerdings bräuchte man alleine für das Array gute 1,2 GB (wenn ich mich da jetzt nicht verrechnet habe)
- ist das notwendig?
 

Andi_CH

Top Contributor
17770 * 17770 * 4Byte > 1MB
Sorg dafür dass die VM auch mindestens so viel Memory zur Verfügung hat, dann klappt es auch.
Java selbst kennt keine Einschränkung die bei so kleinen ;-) Datenstrukturen schon greifen würde.

Siehe z.B. hier beim Titel "Tuning the Java Heap"

EDIT: hi hi 2 Antworten während ich am tippen bin --- die Frage ob notwenig oder nicht ist irrelevant - etwas über 1MB ist für Java auch kein Thema....

-X... ist die Lösung ;-)
 
Zuletzt bearbeitet:

fatfox

Bekanntes Mitglied
Hi, XHelp und oetzi,

wie kann ich die heap space erhöhen?

java -Xms512m -Xmx2048m ??? Ich habe den Command direkt in die Konsole eingegeben, dann bekomme ich eine kommische Help docu. Wie kann ich den Befehl richtig geben? Ich bin Linux green hand....

Michael...

Ich habe keine Ahnung wie viele Platz die Array braucht und wie man sie rechnen kann, Wenn keine Lösung finden, muss ich andere Methode ausdenken...
 

XHelp

Top Contributor
wie kann ich die heap space erhöhen?
Startest du das ganze aus Eclipse bzw. einer andere IDE? Dann such einfach mal nach "IDENAME heapspace", da werden brauchbare anleitungen dabei sein. Bei Eclipse läuft es darauf hinaus, dass du eclipse.ini veränderst.
Ich habe keine Ahnung wie viele Platz die Array braucht und wie man sie rechnen kann
Ein int ist 32 bit lang = 4 byte. Du hast 17770*17770-Stück davon....
 

fatfox

Bekanntes Mitglied
17770 * 17770 * 4Byte > 1MB
Sorg dafür dass die VM auch mindestens so viel Memory zur Verfügung hat, dann klappt es auch.
Java selbst kennt keine Einschränkung die bei so kleinen ;-) Datenstrukturen schon greifen würde.

Siehe z.B. hier beim Titel "Tuning the Java Heap"

Hi Andi,

Kannst du mir mehr verraten, wie kann ich das Problem lösen? (Ich lese gerade die Link, die du mir geschick hast. Ich denke, ich so -Xmx***m eigeben). Aber wo und wie? Ich benutze Ubungtu und Eclipse... bin noch ein Java Anfänger... :-(
 

fatfox

Bekanntes Mitglied
Hi XHelp und Andi_CH,

Ich habe in eclipse.ini so verändert:

[JAVA=18]
-Xms512m
-Xmx1024m
[/code]

Reicht es?

Aber meine Programm funktioniert irgendwie noch nicht, immer die selber Fehlermeldung...
 

preachie

Aktives Mitglied
Nein, das ist die falsche Stelle, da Du in der eclipse.ini die Heap-Werte für Eclipse selbst definierst (sprich für die JVM in der Eclipse ausgeführt wird). (Mal abgesehen davon, wird Xmx1024m nicht reichen, da ja bereits errechnet wurde, dass das Array über 1,2GB verbraucht.)

Führst Du aus Eclipse aber eigene Programme aus, wird dafür eine eigen JVM erzeugt.

Also,
- öffne in Eclipse Dein Projekt
- klicke im Menü "Run" auf "Run Configurations..."
- wähle im linken Baum Deine Applikation aus, bzw. erstelle eine neue sofern sie da noch nicht ist
- rechterhand geh auf die Registerkarte "Arguments"
- im Feld "VM arguments:" trägst Du die -Xms und -Xmx Werte ein
- "Apply" -> "Run" und alles sollte fein sein

So mal grob beschrieben, aber es gibt sicher auch tolle Anleitungen im Netz mit Screenshots ;)
 

fatfox

Bekanntes Mitglied
Ich denke eher, dass da ein Designfehler vorliegt. Wofür brauchst du 17000Zeilen/Spalten?

Ich arbeite mit eine Riesen Daten, Ich möchte für alle zwei Bücher die Anzahl der gemeinsamen Usern finden. Ich habe 17770 Bücher....,deshalb möchte ich so eine riesen Array erzeugen.

Aber ist die Array riesen groß? Braucht es 1,2 G? oder wie Andi_CH gesagt, das ist eigentlich nicht so groß?
 

XHelp

Top Contributor
Vermutlich hat Andi_CH einmal zu viel durch 1024 dividiert.
(aber generell liegt er nicht ganz falsch mit der Aussage. Der Speicher den du brauchst ist tatsächlich größer als 1mb ;) )
Welche Bücher? Welche Benutzer?
Aber generell: du brauchst bestimmt nicht alle Daten _gleichzeitig_ im Speicher zu halten. Du kannst es bestimmt auch Zeilenweise/Knotenweise auswerten
 

preachie

Aktives Mitglied
Auch wenn Du mit vielen Daten arbeitest, musst Du die alle zur gleichen Zeit im Speicher halten?
Kannst Du nicht nur ein paar einlesen, verarbeiten, weiter einlesen, verarbeiten, usw?

Und es sind ~ 1,2GB (weiß nicht, wie Andi auf 1MB kommt ;) )

17770 * 17770 * 4(byte) = 1263091600 Byte = 1233487,890625 KB = 1204,5780181884765625 MB = 1,17634572088718414306640625 GB

;)

Edit: Ich glaube, hier sind zur Zeit zuviele Leute im Thread... man kommt mit den Antworten ja nicht mehr zeitnah hinterher ;)
 

Andi_CH

Top Contributor
Hi XHelp und Andi_CH,

Ich habe in eclipse.ini so verändert:

[JAVA=18]
-Xms512m
-Xmx1024m
[/code]

Reicht es?

Aber meine Programm funktioniert irgendwie noch nicht, immer die selber Fehlermeldung...

Ja logisch - damit gibst du Eclipse mehr Memory - deine Applikation hat nichts davon
Nimm das ruhig wieder raus - Eclipse lief ja zuvor auch

Stichworte:
In Eclipse:
Run - Run Configurations
Java Appliation
<Dein Programm>
Arguments
VM arguments

Da sind die Argumente für die VM die dann deine Applikation ausführt anzugeben

Schreibs mal da rein

EDIT:
Noch was 512 und 1024 wird wohl kaum reichen, da ja dein Array schon über 1MB belegt - geh mal auf 2048 oder noch höher
 
Zuletzt bearbeitet:

fatfox

Bekanntes Mitglied
Danke alle! Ich habe es richtig eingestellt, jetzt funktioniert mein Programm. :D

Aber ihr habt recht, dass so viel Datei einmal arbeiten ist echt dumm, ich muss eine neue Methode für Zeilenweise oder Knotenweise ausdenken!

Danke!!!!!!!!!!!!!:D
 

Andi_CH

Top Contributor
1MB in einer Datenstruktur mag vielleicht viel sein, aber eine anständige Applikation belegt durchaus auch einmal etwas mehr Memory ...
 

preachie

Aktives Mitglied
Andi, ohne Dich jetzt angreifen zu wollen, aber liest Du Dir auch alle Beiträge im Thread durch, die in der Zwischenzeit geschrieben wurden?

1.) hatte ich bereits eine Step-by-step Anleitung geschrieben gehabt, wie man die VM Argumente setzen kann
2.) wurde bereits mehrfach erwähnt, dass es sich nicht um 1MB sondern 1GB handelt

Ist mir nur so mal aufgefallen ;)
 

Andi_CH

Top Contributor
Wir waren gleichzeitig am Tippen - wie ich begonnen habe, stand dein Beitrag noch nicht da ....

17770 * 17770 = 315772900
315772900 * 8 = 2526183200
2526183200 / (1024*1024) = 2409.16

Komisch jetzt komme ich 2.35 GB - die 10er Potenz ging unter -
Komisch ist nur dass mit 17770*17770 mein helloworld Programm startete und mit 27770*27770 Musste ich auf 4096 ???? Egal- ich taste mich immer ran und rechne selten :)

EDIT: Fehler um Faktor 2 oben ein int ist 4 Byte .....

1.18GB
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
S Arbeitsfeld in gleich große Bereiche einteilen Java Basics - Anfänger-Themen 2
C Große Zahlen vergleichen Java Basics - Anfänger-Themen 19
S 4 große Textdateien zu einer Mergen Java Basics - Anfänger-Themen 5
K Große Datenliste Java Basics - Anfänger-Themen 2
E Große Datenmengen effizient in CSV File speichern Java Basics - Anfänger-Themen 4
1 Extrem große Variable Java Basics - Anfänger-Themen 1
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Schneller Quadratzahltest für beliebig große natürliche Zahlen Java Basics - Anfänger-Themen 2
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
B große jpeg verarbeiten Java Basics - Anfänger-Themen 8
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
X Compiler-Fehler javac - 08 eine zu große int? Java Basics - Anfänger-Themen 11
turmaline String teilen in gleich große strings Java Basics - Anfänger-Themen 15
F Große Potenzen berechnen Java Basics - Anfänger-Themen 6
J Große .txt einlesen - Idee? Java Basics - Anfänger-Themen 16
E Datentypen Große Zahl erzeugen Java Basics - Anfänger-Themen 5
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
O Performant große Dateien durchsuchen Java Basics - Anfänger-Themen 8
J Große animierte Gif preloaden und solange mit einer nicht animierten ersetzen Java Basics - Anfänger-Themen 5
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
H Große Projekte mit Java - Ausführbare Datei Java Basics - Anfänger-Themen 2
K Eclipse EMF und das große HÄ? Java Basics - Anfänger-Themen 5
T .split(";") nicht gleich große arrays werden erzeu Java Basics - Anfänger-Themen 2
G String aus Zahlen multiplizieren -> unendlich große ! Java Basics - Anfänger-Themen 13
M Spielt der Debugger bei java eine große Rolle Java Basics - Anfänger-Themen 3
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
L JTextArea große setzen Java Basics - Anfänger-Themen 5
S große probleme mit java Java Basics - Anfänger-Themen 6
R große Datenmenge in Datei schreiben Java Basics - Anfänger-Themen 8
M FileOutputStream und zu große Zahlen! Java Basics - Anfänger-Themen 10
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
B Probleme große Strings zu schreiben Java Basics - Anfänger-Themen 2
A große errechnete datenmengen sofort in datei schreiben? Java Basics - Anfänger-Themen 6
S Große Text dateien einbinden Java Basics - Anfänger-Themen 3
R große Zahlen Java Basics - Anfänger-Themen 4
R Große Zahlen Java Basics - Anfänger-Themen 3
T Große Zahlen aufgesplittet in verketteter Liste speichern Java Basics - Anfänger-Themen 4
N Große Probleme mit StingBuffer und Array Java Basics - Anfänger-Themen 2
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben