Hallo an Alle!
Ich habe in meinem Programm folgende Fehlermeldung erhalten:
>>
>> OutOfMemoryError: Java heap space" error
>>
An der Stelle im Code wird eine Datei eingelesen, welche ungefaehr 4 Millionen Zeilen hat, was wohl zu viel fuer den Heap ist. Ich muss die Datei jedoch einlesen, um bestimmte zeilen zu extrahieren, also so:
1.
Ich weiss sonst nicht, wie ich das Speichereffizient machen kann, weil diese Zeilen ich fuer den weiteren Programmablauf brauche. Hat jemand da Tipps fuer mich?
2.
Ich benutze ArrayList, weil ich nicht vorher weiss, wie viele Zeilen ich speichern muss, gibt es da einen effizienteren weg, weil soweit ich weiss, wird ja immer wieder ein neues Array erstellt bei der Methode .add(), stimmts?
3. Ich benutze als SubArray ja int[], weil ich dachte, wenn ich genau die groesse angebe, die ich im array erwarte, das an Speicher sparrt, ist das richtig oder bringt das doch nicht so viel und es gibt einen besseren weg?
4. Wo kann ich denn generell mir Informationen ueber Speicherverbrauch holen, also jetzt nicht sowas wie String: 8 Bits oder sowas, sondern halt ob beim z.B. einlesen einer Datei die Zeilen auf den Speicher gepackt werde und wie man sowas verbessern kann?
Ich habe in meinem Programm folgende Fehlermeldung erhalten:
>>
>> OutOfMemoryError: Java heap space" error
>>
An der Stelle im Code wird eine Datei eingelesen, welche ungefaehr 4 Millionen Zeilen hat, was wohl zu viel fuer den Heap ist. Ich muss die Datei jedoch einlesen, um bestimmte zeilen zu extrahieren, also so:
Java:
ArrayList<int[]> myLines = new ArrayList<int []>();
BufferedReader read = new BufferedReader(new FileReader(filePath));
String s = "";
while ((s == reader.readLine()) != null) {
if (s.contains("myLine")) {
String []parts = s.split("\t");
int []a = new int[5];
for (int i = 0; i < 5; i++) {
a[i] = Integer.parseInt(s[i]));
}
myLines.add(a);
}
}
1.
Ich weiss sonst nicht, wie ich das Speichereffizient machen kann, weil diese Zeilen ich fuer den weiteren Programmablauf brauche. Hat jemand da Tipps fuer mich?
2.
Ich benutze ArrayList, weil ich nicht vorher weiss, wie viele Zeilen ich speichern muss, gibt es da einen effizienteren weg, weil soweit ich weiss, wird ja immer wieder ein neues Array erstellt bei der Methode .add(), stimmts?
3. Ich benutze als SubArray ja int[], weil ich dachte, wenn ich genau die groesse angebe, die ich im array erwarte, das an Speicher sparrt, ist das richtig oder bringt das doch nicht so viel und es gibt einen besseren weg?
4. Wo kann ich denn generell mir Informationen ueber Speicherverbrauch holen, also jetzt nicht sowas wie String: 8 Bits oder sowas, sondern halt ob beim z.B. einlesen einer Datei die Zeilen auf den Speicher gepackt werde und wie man sowas verbessern kann?