Javagreenhorn: Speicherprobleme / Absturz javatypisch oder hausgemacht?

Hallo,

natürlich weiss ich, dass man zu konkreten Fragen am besten soviele Details wie möglich den Code mitposten soll, aber trotzdem wage ich mal eine etwas allgemeinere Farge zu einem Problem zu stellen:

Wir programmieren MySQL-Datenbankclients in Java, also eigentlich nichts wirklich komplexes. N paar Formulare, einige Datenbankabfragen -wobei ich finde, dass das Erstellen eines Formulars in Java schon eine Riesenangelegenheit (im Gegensatz zu HTML/PHP) ist. Pivot darf ich leider (noch) nicht nutzen.

Das Javaprogramm läuft auf einem virtuellen Server mit 4GB Speicher. Relativ regelmässig stürtzt das Programm bzw. der Server ab, weil das Programm zuviel Arbeitsspeicher verbraucht.

Frage: Ist das einfach ein Problem von Java / JRE selbst oder riecht das schon nach einem versteckten Programmierfehler mit altem Speicher, den der (doch eigentlich sehr gute) garbage collector nicht erkennen kann.Oder hat das irgendwie mit Threads zu tun?

Ich selber bin mir nicht sicher. Ich habe das Programm nicht geschrieben und vermute einen Softwarefehler, kenne mich mit Threads und Gültigkeit/Lebensdauer von Objekten in Java noch nicht so gut aus. Andererseits weiss ich, dass der relativ fehlerfreie Eclipse als simpler Editor auch gigantische Ressourcen verbraucht.

Viele Dank für eure Hilfe,
Javagreenhorn

  1. Moin,

    Das Javaprogramm läuft auf einem virtuellen Server mit 4GB Speicher. Relativ regelmässig stürtzt das Programm bzw. der Server ab, weil das Programm zuviel Arbeitsspeicher verbraucht.

    Bekommt das Programm tatsächlich die 4 GB Speicher zugewiesen? Ich vermute mal nicht.

    Bei Start eines Java-Programms kann man über Parameter (-Xmx etc., java -X gibt eine Hilfe zu diesen Optionen aus) festlegen, wie viel Arbeitsspeicher das Programm bekommt. Möglicherweise ist hier ein zu kleiner Wert eingetragen. Eventuell solltet ihr mal in dieser Richtung forschen.

    Gruß

    Stareagle

  2. Hi Javagreenhorn!

    Frage: Ist das einfach ein Problem von Java / JRE selbst oder riecht das schon nach einem versteckten Programmierfehler mit altem Speicher, den der (doch eigentlich sehr gute) garbage collector nicht erkennen kann.Oder hat das irgendwie mit Threads zu tun?

    Ich kann jetzt auch nur aus persönlicher Erfahrung mit Java-Programmen sprechen. Mir ist auch aufgefallen, dass Java-Anwendungen im Vergleich häufig etwas träge und RAM-lastig sind. Möglicherweise liegt das einfach in der Natur des JRE.
    Was mich auch nervt: Javaverwendet in der Regel nicht die Fensterauszeichnung und Steuerelemente des Betriebssystems sondern eigene Varianten.

    mfG
    Benjamin

    --
    For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks.