ArrayList Out of Memory

  • Themenstarter Themenstarter Christian76
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Christian76

Gast
Hallo,

ich habe mal ein Frage über die ArrayListen. Ich befülle eine ArrayList mit JButton solange bis folgenden
Meldung erscheint:

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space


Code:
        for (int i = 0; i < 10000; i++) 
        {
                    ArrayListe.add(new JButton("Knopf"));
        }


Ist die maximale Größe überschritten? Kann ich den Bereich vergrößern?

Gruß

- Christian
 
Du hast den maximalen Speicherverbrauch erreicht, d. h. deine VM hat keinen Arbeitsspeicher mehr. Du könntest den HeapSize erhöhen, oder über eine alternative nachdenken, wie du keine 10000 grafische Elemente in einer Liste unter bekommst :roll: .
 
Ok, das hat natürlich keine Praxisrelevanz, wollte nur mal schauen wieviele ich da reinkriegen, bzw, was ich so alles
in die ArrayList laden kann.

Also ich kenne das von C++, die Klasse VECTOR. Die kann man ja schon beliebig groß konfigurieren.

Aber wie kann ich bei meiner JVM die Heap vergrößern?
 
java -Xms<initial heap size> -Xmx<maximum heap size>

Also ich kenne das von C++, die Klasse VECTOR. Die kann man ja schon beliebig groß konfigurieren.
Im Prinzip schon, aber wenn dir der Arbeitsspeicher (+ evtl. swap) ausgeht, ist da auch Schluß :wink:
 
Da musst du aber noch was anderes im Speicher haben. Ich bekomme Standardmäßig 84955 Buttons in meine ArrayList 😀 .

Bei allgemeinen Fragen wie den Heap von der VM erhöhen solltest du in Zukunft die Forensuche nutzen, auch deinen Fehler hättest dir durch die Forensuche erklären lassen können. Du bist nämlich nicht der Erste, der so ein Problem hat 😉 .

Also, den Verfügbaren Speicher erhöht man beim Starten der Applikation durch den Parameter -Xmx256m (hier 256MB Speicher)

[edit] Hui, da war ich mal wieder langsam 😳
 
Klasse, wunderbar. Wiedermal danke für eure schnelle Hilfe.

Gruß
- Christian
 
aber nochmal was anderes die JVM Syntax, oder besser die Ausschnitte die ihr mir gezeigt habt (java -Xms<initial heap size> -Xmx<maximum heap size> ), gibs dafür eine Liste mit allen?
 
Hobbit_Im_Blutrausch hat gesagt.:
Mit nem leeren JButton komm ich sogar auf 91462 😛

Mist 🙁 , hast gewonnen.

Aber das interessiert mich jetzt mal; Woran liegt das?

Code:
import java.util.*;
import javax.swing.*;

public class Test {
	public static void main(String[] args) {
		List<JButton> list = new ArrayList<JButton>();
		for (int i=1; i <= 100000; i++) {
			list.add(new JButton());
			System.out.println(i);
		}
	}
}
gibt bei mir 89 383 Buttons, aber jede JVM bekommt doch
die gleiche Menge Speicher zugewiesen; also woher könnten die
Unterschiede kommen? ???:L
 
1. Edit beachten, ich komme jetzt auf 91708.
2. Wenn ich der ArrayList einen entsprechend intelligent gewählten Initalisierugnswert zuweiße, bekomme ich noch mal ein paar mehr rein
3. Ohne Initialisierungswert komme ich immernoch auf 91242, denke mal das liegt daran, dass du noch einen FileWriter laufen hast, der dir die Ausgabe in eine Textdatei speichert
 
ich glaube meine Frage ist irgendwie untergegangen,

wo finde ich eine Liste mit den JVM Code wie z.B.

-Xmx256m
 
Habe ich dir doch schon mit einem Link beantwortet. :shock:

Dort, oben rechts in der Leiste, auf "Tool Docs" und dann auf "Basic Tools" klicken.
 
bleiben wir doch beim Thema 🙂
mmh, weis jemand warum die Exception nicht abgefangen wird!

Code:
import java.util.ArrayList;

public class Main 
{
    public static void main(String[] args)
    {
        ArrayList List = new ArrayList();
        double test = 3;
        while(true)
        {
            try
            {
                List.add(test);
            }
            catch(Exception e)
            {
                System.out.println("FEHLER: " +e.toString());
                break;
            }
        }
    }
}
 
Weil es ein OutOfMemoryError ist und keine OutOfMemoryException und somit nicht von Exception abgeleitet ist, sondern von Error.
 
damit kann man lustige Sachen machen!! 🙂

compile:
run:
#
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 167772160 bytes for GrET in C:\BUILD_AREA\jdk6\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
#
# Internal Error (414C4C4F434154494F4E0E494E4C494E450E4850500017), pid=2864, tid=4048
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode)
# An error report file with more information is saved as hs_err_pid2864.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
Java Result: 1
BUILD SUCCESSFUL (total time: 8 seconds)
 
gibt es eigentlich Methoden mit den ich z.B. die belegten Speicher abfragen kann?
 
Hm, das ist widerrum unnormal. So eine Textdatei wird nur bei einer nicht definierten Ausnahme in der VM generiert und ist folglich idR ein Bug. Poste doch mal deinen kompletten Code, der diesen Fehler erzeugt ...
 
ich übergebe als Syntax der Java Console: -Xmx1300m

hier mein Code:

Code:
import java.util.ArrayList;

public class Main 
{
    public static void main(String[] args)
    {
        ArrayList List = new ArrayList();
        double test = 3;
        while(true)
        {
            try
            {
                List.add(test);
            }
            catch(Error e)
            {
                System.out.println("HEAP voll: " +e.toString());
                break;
            }
        }
    }
}
 
java.lang.OutOfMemoryError: requested 167772160 bytes for GrET in C:\BUILD_AREA\jdk6\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
Gast hat gesagt.:
ich übergebe als Syntax der Java Console: -Xmx1300m
Wieviel Arbeitsspeicher hast du und wie viel Swap? Wenn die Summe kleiner als 1.3 GB + Speicher für OS + Apps ist, ist die Fehlermeldung irgendwie einleuchtend :wink:
 
Die try-catch-Anweisungen sind dazu da, Exceptions abzufangen, keine Errors! Wenn ein Error auftritt, kannst du als Programmierer mit an Sicherheit grenzender Wahrscheinlichkeit nichts mehr machen, außer dein Programm abstürzen zu lassen.

Ark
 
try/catch Error oder gleich Throwable GEHT genauso,
ob man das machen sollte ist durchaus die Frage, ja
 
aber nochmal zu meiner Frage:

gibt es eigentlich Methoden mit den ich z.B. die belegten Speicher abfragen kann?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben