Java Heap Space Exception

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,

in meinem Programm hole ich mir Daten aus einer Datenbank und stelle diese mit einem jFreeChart dar, ich hole mir die Daten z.B.: alle 5 sec aus der DB,
nach einer gewissen Zeit (1 Stunde) bekomme ich folgende Fehlermeldung(unten),

Weiß vielleicht jemand, wie ich diese Fehlermeldung beheben kann??

lg und herzlichen Dank für die Antworten,



Code:
Exception in thread "Timer-29" java.lang.OutOfMemoryError: Java heap space
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
        at java.lang.Class.getConstructor0(Class.java:2699)
        at java.lang.Class.getConstructor(Class.java:1657)
        at org.firebirdsql.jdbc.FBStatementFactory.createStatement(FBStatementFactory.java:189)
        at org.firebirdsql.jdbc.AbstractConnection.createStatement(AbstractConnection.java:765)
        at org.firebirdsql.jdbc.AbstractConnection.createStatement(AbstractConnection.java:254)
        at net.ppos.datenbank.DBWriter.fillTable(DBWriter.java:113)
        at net.ppos.datenbank.DBWriter.run(DBWriter.java:93)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
Exception in thread "Timer-24" java.lang.OutOfMemoryError: Java heap space
        at java.util.LinkedHashMap.createEntry(LinkedHashMap.java:424)
        at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:406)
        at java.util.HashMap.put(HashMap.java:385)
        at sun.util.resources.OpenListResourceBundle.loadLookup(OpenListResourceBundle.java:118)
        at sun.util.resources.OpenListResourceBundle.loadLookupTablesIfNecessary(OpenListResourceBundle.java:97)
        at sun.util.resources.OpenListResourceBundle.handleGetObject(OpenListResourceBundle.java:58)
        at sun.util.resources.TimeZoneNamesBundle.handleGetObject(TimeZoneNamesBundle.java:59)
        at java.util.ResourceBundle.getObject(ResourceBundle.java:380)
        at java.util.ResourceBundle.getObject(ResourceBundle.java:383)
        at java.util.ResourceBundle.getStringArray(ResourceBundle.java:363)
        at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:100)
        at sun.util.TimeZoneNameUtility.retrieveDisplayNames(TimeZoneNameUtility.java:81)
        at java.util.TimeZone.getDisplayNames(TimeZone.java:399)
        at java.util.TimeZone.getDisplayName(TimeZone.java:350)
        at java.util.Date.toString(Date.java:1024)
        at java.lang.String.valueOf(String.java:2827)
        at org.jfree.data.time.RegularTimePeriod.toString(RegularTimePeriod.java:346)
        at org.jfree.data.time.TimeSeries.add(TimeSeries.java:523)
        at org.jfree.data.time.TimeSeries.add(TimeSeries.java:598)
        at org.jfree.data.time.TimeSeries.add(TimeSeries.java:583)
        at net.ppos.trend.MultipleAxisTrend.createPlot(MultipleAxisTrend.java:219)
        at netk.ppos.trend.MultipleAxisTrend.updatePanel(MultipleAxisTrend.java:185)
        at net.ppos.datenbank.DBDriver.findFile(DBDriver.java:150)
        at net.ppos.component.CheckList.setShift(CheckList.java:115)
        at net.ppos.component.Trend.aktTrend(Trend.java:519)
        at net.ppos.component.TrendAkt.run(TrendAkt.java:36)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
Exception in thread "EventThread" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
 

The_S

Top Contributor
Dein Speicher ist voll. Schaufel speicher frei oder wenn das nicht geht, der VM mehr Speicher zuweisen. Vermutlich baust du aber nur systematisch deinen Speicher zu bzw. hast irgendwo ne unglückliche endlos-schleife ;) .
 

PollerJava

Top Contributor
Ja, ich hatte das auch bei den *.svg- Dateien -> Wenn ich 5 geöffnet hatte, dann war der Heap voll nur wo ich jetzt in meinem Code den Speicher kontinuierlich anfülle, ist mir nicht klar?????

Kann ich den Heap explizit leeren, was kommt eigentlich in den Heap- Speicher?
 
G

Guest

Gast
als Ergaenzung meines Vorgaengers

java -Xms <size>
Set initial Java heap size. Default: Xms32m

java -Xmx<size>
set maximum Java heap size. default:Xmx128m

z.B.

java -Xms=32m -Xmx=256m <Klassenname>
 

The_S

Top Contributor
Der GarbageCollecter leert den Heap von selbst. Du kannst in bitten zu gucken, was er leeren kann. Aber ob er das dann macht oder nicht, bleibt ihm überlassen. Generell werden aber auch nur Objekte gelöscht, die nicht mehr benötigt werden, also keine Referenz mehr darauf besteht.

In den Heap kommt alles, was Arbeitsspeicher benötigt (also so ziemlich deine komplette App mit allen Daten ;) ).
 

PollerJava

Top Contributor
ja das kanns ja nicht sein, Mein Programm soll Monate bis Jahr laufen und der Java Heap ist schon nach einer Stunde voll, da hilft mir das vergrößern des Heaps nicht sehr viel,

lg
 
S

SlaterB

Gast
du darfst eben Bilder, die nicht angezeigt werden, nicht im Speicher halten,
vielleicht hast du eine Liste mit vorherigen Bilder oder ähnliches,

sowas ist schwer von außen zu sagen
 

PollerJava

Top Contributor
nö nö, die svg- Bilder hab ich eh nicht mehr, ich wollte nur sagen, dass ich, wie ich das mit den *.svg- bildern ausprobiert habe, auch schon mal einen OutOfMemoryError vom Java heap space hatte.

Kann es eigentlich sein, dass das was mit einer ArrayList zu tun hat, welche ich als static definiert habe und wo immer mehr Einträge hinzugefügt werden???

lg
 

PollerJava

Top Contributor
Hab jetzt in meinem Code nicht konkretes gefunden, keine Ahnung, was das sein kann,

Kann ich beim Debuggen irgendwie sehen, wie sich der Java Heap füllt?
 

The_S

Top Contributor
Wenn du ständig Dinge in deine ArrayList hinzufügst, aber nie etwas raus löschst, ist der Heap natürlich irgendwann voll!
 

NTB

Bekanntes Mitglied
Du sagst, Du liest alle 5 Sekunden aus der DB. Was soll mit den alten Daten passieren, die Du beim letzten Schritt gelesen hast? Sollen die erhalten bleiben oder brauchst Du die dann nicht mehr?

Ich vermute mal, die brauchst Du dann nicht mehr. Werden Sie denn auch "gelöscht"? Der Teil des Codes ist wahrscheinlich interessant.
 

PollerJava

Top Contributor
Also ich mach das so:


Code:
 private HashMap<String, Float> dBWerte = new HashMap<String, Float>();

....


1. rs = con.createStatement().executeQuery("SELECT zeitstempel, wert FROM " + dBName + " WHERE zeitstempel BETWEEN '" + zeitVon + "'" + " AND '" + zeitBis + "'");   // aus DB herausholen

2. xYTrend.updatePanel(dBWerte, name, xSeite, einheit, lineColor, zeitRaum);  // auf jFreePanel darstellen
            

3. dBWerte.clear();    // HashMap clearen


Ich kann da jetzt nichts sehen, was im Speicher bleiben würde, bin aber sehr Dankbar für Verbesserungstipps,

lg
 

NTB

Bekanntes Mitglied
Hm. Da stimm ich Dir zu.

Und wo ist Deine statische ArrayList? Was wird mit der gemacht?
 

PollerJava

Top Contributor
NTB hat gesagt.:
Hm. Da stimm ich Dir zu.

Und wo ist Deine statische ArrayList? Was wird mit der gemacht?


dbWerte oben war statisch, sonst war alles gleich,

Was bei mir noch statisch ist:


Code:
public static Connection con, con1;  // 2 Verbindungen zur DB
 
G

Guest

Gast
Das da ist vermutlich das Problem.
Code:
rs = con.createStatement()...
Meine Vermutung ist, dass du die Connection dauernd offen hälst und die Statements nie freigibst.
Irgendwann mal ist der Speicher voll.

Ich dachte das Thema "Schliessen von ResultSets und Statements" haben wir schon geklärt. (http://www.java-forum.org/de/viewtopic.php?p=323907)
 

PollerJava

Top Contributor
Ja ich habs momentan so implementiert, dass ich 2 statische Connection habe,

Mir ist nicht ganz klar, wie der speicher voll werden kann, nur weil ich die Connection statisch habe,
Das sind ja nur 2 Connections die offen sind, oder??

lg
 

PollerJava

Top Contributor
Hätte noch eine Frage zu

Code:
stmt = getConnection().prepareStatement(String.format("SELECT zeitstempel, wert FROM %s WHERE zeitstempel BETWEEN ? AND ?", dBName));

Muss ich schreiben

Code:
DriverManager.getConnection(). ...

oder was muss ich da noch schreiben?? Ich bekommen nämlich eine Fehlermeldung - die Methode getConnention() kennt der Kompiler nicht,

lg und vielen Dank
 
S

SlaterB

Gast
?
du hast doch (anscheinend) bisher schon mit Connections und Statements gearbeitet,
also wirst du doch irgendwo schon eine Connection her haben,

getConnection() geht nur wenn die Klasse, in der du dich befindest, eine entsprechende Operation anbietet,
Grundlagenkapitel 1 ;)
 
G

Guest

Gast
Das getConnection() soll eine Methode von dir sein, wo du eine neue Connection aufbaust oder eine bestehende
zurückgibst. Von mir aus deine statische Connection. Mach aber immer wieder die ResultSets zu, damit der Speicher
freigegeben wird. Und wenn du kein PreparedStatement verwendest, dann das normale Statement ebenfalls freigeben.
Verwendest du wieder PreparedStatement, kannst du es wiederverwenden und beim Beenden des Programms bzw.
beim Schliessen der Connection freigeben.
 

PollerJava

Top Contributor
genau so hab ichs jetzt gemacht,
Vielen Dank für die Hilfe,


PS: eine kleine Frage hätte ich noch:
Was hat es damit auf sich, dass ich in meinem SQL Text ein ? hineinmachen und es dann mit dem Statement setzen kann,
ist das allgemein gültig bei Strings oder geht das nur bei Statements

(hab ich noch nie gesehen)

Code:
stmt = con.prepareStatement(String.format("SELECT zeitstempel, wert FROM %s WHERE zeitstempel BETWEEN ? AND ?", dBName));
                        stmt.setTimestamp(1, tsAktStart);
                        stmt.setTimestamp(2, tsAktEnd);
 
G

Guest

Gast
Das sind Platzhalter in PreparedStatement. Die Werte werden dann, JDBC-Treiber abhängig, im korrekten Format
gesetzt.

z.B.
Code:
PreparedStatement stmt = getConnection().prepareStatement(
   "SELECT DISTINCT schnitzel, pommes, mayo"
  +"  FROM tblKantine"
  +" WHERE (preis_schnitzel + preis_pommes + preis_mayo) < gehalt/100)"
  +"   AND schnitzel_haltbarkeitsdatum > ?"
  +"   AND schnitzel_maul_und_klauenseuche = false"
  +"   AND pommes_frittierfett = ?"
  +"   AND mayo_konsistenz NOT LIKE ?"
  +"   AND koch_alkoholintus <= 0.8"
  +"   AND kassentussi LIKE '90,60,90'"
);

stmt.setDate(1, new Date()); // Parameterindex beginnt immer mit 1
stmt.setDate(2, new Date());
stmt.setString("%salmonellenbiotop%");
...
:D
 
G

Guest

Gast
Korrektur
Code:
stmt.setString(3, "%salmonellenbiotop%");
 

PollerJava

Top Contributor
Vielen Dank,


Jetzt habe ich noch ein Problem und zwar beim schreiben in die DB,

Ich habe folgende Methode (unten), wenn ich diese Ausführe, bekomme ich aber folgende Fehlermeldung:

Code:
Fehler Klasse beim Schreiben in die Tabelle  : org.firebirdsql.jdbc.FBSQLException: No resultset for sql
Fehler Klasse beim Schreiben in die Tabelle  : org.firebirdsql.jdbc.FBSQLException: No resultset for sql


Was mache ich da falsch??

herzlichen Dank!!





Code:
 protected synchronized void fillTable(String tableName, Timestamp kommen, float wert, Timestamp gehen, Timestamp quit, String alarmNr, int var1, int var2)
            {
            try {
                PreparedStatement stmt = null;   
               
                    stmt = DBDriver.con.prepareStatement(String.format("INSERT INTO %s (zeitstempel, wert) VALUES ( ? , ?)", tableName));
                    stmt.setTimestamp(1, kommen);
                    stmt.setFloat(2, wert);
                    stmt.executeUpdate();
                    
                }
            catch (SQLException e) 
                {
                System.out.println("Fehler Klasse DBWriter beim Schreiben in die Tabelle " + tableName + " : " + e);
                }
            }
[/code]
 

PollerJava

Top Contributor
Wollte "stmt.executeUpdate();" schreiben


Ich benutze jetzt eine Connection zum herauslesen und zum hineinschrieben in die DB, bekomme jetzt aber wieder die Exception:

Code:
Fehler in der Klasse DBDriver beim Auslesen aus der DB: org.firebirdsql.jdbc.FBSQLException: The resultSet is closed
Fehler in der Klasse DBDriver beim Auslesen aus der DB: org.firebirdsql.jdbc.FBSQLException: The resultSet is closed
Fehler in der Klasse DBDriver beim Auslesen aus der DB: org.firebirdsql.jdbc.FBSQLException: Result set is already closed.
Fehler in der Klasse DBDriver beim Auslesen aus der DB: org.firebirdsql.jdbc.FBSQLException: The resultSet is closed
Fehler in der Klasse DBDriver beim Auslesen aus der DB: org.firebirdsql.jdbc.FBSQLException: The resultSet is closed

Wie gibts das?
Muss ich auch 2 Connections verwenden??
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
L Java OutOfMemoryError Java heap space Allgemeine Java-Themen 3
L java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 10
S Java heap space zu klein? Allgemeine Java-Themen 6
B Java Heap Space Allgemeine Java-Themen 5
A OutOfMemoryError: Java heap space Allgemeine Java-Themen 11
I Java heap space Allgemeine Java-Themen 3
K Erhöhung Java Heap Space in Netbeans 6.5 - funktioniert nicht oder bringt nichts? Allgemeine Java-Themen 1
K OutOfMemoryError: Java heap space troz -Xms1024m Allgemeine Java-Themen 2
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
V Java heap space Problem Allgemeine Java-Themen 8
Saxony ANT, ProGuard und Java heap space Allgemeine Java-Themen 8
P Java Heap Space Allgemeine Java-Themen 11
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
MQue Java Heap space Probleme Allgemeine Java-Themen 26
J java Thread java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 7
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
G Wird bei RAM-Mangel für Java Heap Space geswappt? Allgemeine Java-Themen 34
H java heap space (outofmemory error) Allgemeine Java-Themen 3
F java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 22
C Java heap Space, aber wie wegkriegen? Allgemeine Java-Themen 3
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
V Java Heap Size -Xmx1024m reicht nicht! Allgemeine Java-Themen 14
E Konfigurieren des Java Heap-Spaces Allgemeine Java-Themen 5
D Java Heap error trotz anpassungen mit -xmx Allgemeine Java-Themen 4
P Java Heap Size feststellen Allgemeine Java-Themen 6
G Probleme mit dem Java heap Allgemeine Java-Themen 14
S Java Heap Dump erstellen Allgemeine Java-Themen 1
P Java heap Allgemeine Java-Themen 5
P Jave Heap Size und ObjectStreams.ein java bug ? Allgemeine Java-Themen 5
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben