Hallo,
ich tüftle nun schon eine weile an einem problem von mir. Hoffe hier hat jemand eine idee.
Ich muss sehr viele Daten irgendwie im Speicher speichern (halten)
Es handelt es sich hierbei um den inport von csv Daten. Ich habe also Spalten und Reihen. Allerdings müssen es nicht immer die selben anzahl von Spalten sein.
Bisher habe ich die Daten in einer ArrayList<ArrayList<String>> gespeichert. Klappt auch ganz gut bis zu einer gewissen größe der csv dateien. Wenn diese sehr groß werden zb. 100 spalten und 500.000 Zeilen bekomme ich irgendwann eine out of memory exeption.
Das Problem ist hierbei wohl die menge an Strings die gespeichert werden. Wenn ich nähmlich das Programm durchlaufen lasse ohne das ich den Inhalt in die Strings abspeichere (das array wird jedoch angelegt) geht alles gut durch.
Habe auch schon Probiert die Strings in int[] umzuwandeln und so zu speichern, oder eine LinkedList statt einer ArrayList zu nehmen.
Die Linked List bringt gar nichts und das int[] bringt zwar etwas aber nicht genügend.
Hatt jemand eine Idee wie ich das Problem lösen könnte.
(klar ich kann die VM hochsetzen, nur ist eine blöde methode da dies per hand gemacht werden muss)
hier mal noch ein kurzes codebeispiel falls es jemand durchspielen möchte.
int row = 0;
int col = 0;
try
{
ArrayList<ArrayList<String>> csvData = new ArrayList<ArrayList<String>>();
for(row = 0; row < 500000; row++)
{
csvData.add(new ArrayList<String>());
for(col = 0; col < 100; col++)
{
String value = "dies ist ein neuer String denich da jetzt reinpacke mit der nummer" + row + col;
csvData.get(row).add(value);
}
}
}
catch(final java.lang.OutOfMemoryError e)
{
throw e;
}
boolean geschafft = false;
geschafft = true;
ich tüftle nun schon eine weile an einem problem von mir. Hoffe hier hat jemand eine idee.
Ich muss sehr viele Daten irgendwie im Speicher speichern (halten)
Es handelt es sich hierbei um den inport von csv Daten. Ich habe also Spalten und Reihen. Allerdings müssen es nicht immer die selben anzahl von Spalten sein.
Bisher habe ich die Daten in einer ArrayList<ArrayList<String>> gespeichert. Klappt auch ganz gut bis zu einer gewissen größe der csv dateien. Wenn diese sehr groß werden zb. 100 spalten und 500.000 Zeilen bekomme ich irgendwann eine out of memory exeption.
Das Problem ist hierbei wohl die menge an Strings die gespeichert werden. Wenn ich nähmlich das Programm durchlaufen lasse ohne das ich den Inhalt in die Strings abspeichere (das array wird jedoch angelegt) geht alles gut durch.
Habe auch schon Probiert die Strings in int[] umzuwandeln und so zu speichern, oder eine LinkedList statt einer ArrayList zu nehmen.
Die Linked List bringt gar nichts und das int[] bringt zwar etwas aber nicht genügend.
Hatt jemand eine Idee wie ich das Problem lösen könnte.
(klar ich kann die VM hochsetzen, nur ist eine blöde methode da dies per hand gemacht werden muss)
hier mal noch ein kurzes codebeispiel falls es jemand durchspielen möchte.
int row = 0;
int col = 0;
try
{
ArrayList<ArrayList<String>> csvData = new ArrayList<ArrayList<String>>();
for(row = 0; row < 500000; row++)
{
csvData.add(new ArrayList<String>());
for(col = 0; col < 100; col++)
{
String value = "dies ist ein neuer String denich da jetzt reinpacke mit der nummer" + row + col;
csvData.get(row).add(value);
}
}
}
catch(final java.lang.OutOfMemoryError e)
{
throw e;
}
boolean geschafft = false;
geschafft = true;
Zuletzt bearbeitet: