etreu Geschrieben 7. Juli 2003 Geschrieben 7. Juli 2003 Hi, ich habe ein GUI für eine Konsolenanwendung geschrieben (W2K). Ich habe allerdings das Problem, dass die GUI zur Ausführungszeit ca. 15 MB Arbeitsspeicher nutzt (das schafft bei mir sonst kaum eine andere Anwendung!). Ich nutze einige Swingklassen (JFrame, JPanel, JButtons, JFileChooser, ...). Die Imports sind schon sehr eingeschränkt, so dass nur die einzelnen Klassen importiert werden, nicht der Rest des Paketes. Kann mir jemand verraten, wie ich die Nutzung des RAM einschränken kann? Zitieren
kingofbrain Geschrieben 8. Juli 2003 Geschrieben 8. Juli 2003 Servus! Das kann man ohne Code nicht sagen. Kann es sein, dass Du Referenzen auf Objekte im Speicher hältst, die Du nicht mehr brauchst? Die können den Speicher aufblasen. Am besten gehst Du mal mit einem Tool drüber, welches Dir den allokierten Speicher und die einzelnen Objekte liefert. Musst mal googeln, weil ich da für Swing nichts habe. Für eclipse wäre es sleak. Peter Zitieren
Peeter Geschrieben 8. Juli 2003 Geschrieben 8. Juli 2003 Ich geb dir mal nen kleinen Tip. Erstelle nur mal ein einfaches JFrame mit nem JButton drauf. Schau dir jetzt mal den Speicherverbrauch an. Du wirst verblüfft sein. Java braucht nun mal viel Speicher. Man kann zwar versuchen zu optimieren, nur bringt das meistens nicht wirklich viel. Es hört sich zwar doof an, aber Arbeitsspeicher ist wesentlich günstiger als sich die Mühe zu machen ca. 500kb Speicher raus zu kitzeln. Peet Zitieren
PerdianMG Geschrieben 8. Juli 2003 Geschrieben 8. Juli 2003 ich habe ein GUI für eine Konsolenanwendung geschrieben (W2K). Ich habe allerdings das Problem, dass die GUI zur Ausführungszeit ca. 15 MB Arbeitsspeicher nutzt (das schafft bei mir sonst kaum eine andere Anwendung!). Ich würde das nicht als Speicherfresser bezeichnen, sondern als normales Java-Programm. Da kannst du machen was du willst aber sobald die VM erstmal oben ist und du ein paar graphische Elemente erstellt hast wirst du immer schon bei über 10 MB liegen. Aber ich würde mir da auch keinen soooo großen Kopf drum machen. Hab gerade mal bei mir in die Prozesstabelle gesehen und zwei IE Instanzen liegen auch bei 12 und 14 MB - das liegt also auf dergleichen Stufe. Eclispse benötigt bei mir auch schonmal 50 MB und mehr. Aber wir haben ja auch keinen Wettbewerb "Wer benötigt am wenigsten Speicher". Gedanken würde ich mir erst machen, wenn dein Programm merklich langsamer wird und das ganze System mit nach unten zieht. Ciao Christian Zitieren
aokieh Geschrieben 10. Juli 2003 Geschrieben 10. Juli 2003 Wir haben das selbe Problem. Die 15 MB am Anfang stören mich nicht, aber je länger das Prog läuft, desto größer wird der Speicherbedarf. Alle Instanzen usw. werden nachweislich abgebaut. Aber Java gibt den Speicher nicht mehr frei, zumindest nicht alles. Am Ende eines Arbeitstages liegt der Speicher bei den Benutzer bei ca. 120 MB. SKANDAL. Zitieren
kingofbrain Geschrieben 10. Juli 2003 Geschrieben 10. Juli 2003 Mit welcher Version der VM arbeitet Ihr denn? Ab 1.4 ist nämlich die Arbeit mit dem Speicher vorbildlich. Und wie wisst Ihr, dass Ihr alle Objekte freigebt? Peter Zitieren
Peeter Geschrieben 10. Juli 2003 Geschrieben 10. Juli 2003 Also 120 MB ist doch wohl ein bisschen übertrieben. Wir arbeiten auch den ganzen Tag mit den Programmen und haben am Abend auch nicht mehr Speicherverbrauch (ca. 25-35MB) als am Morgen (trotz ewig vielen Datenbankzurgiffen und entsprechender GUI). Wir arbeiten hier mit der J2RE-1.4.1_02 für Windows. Und die geht echt klasse. Peet Zitieren
Jaraz Geschrieben 10. Juli 2003 Geschrieben 10. Juli 2003 Hi, also 15 MB sind bei Swing vollkommen normal. Ich komme z.B. für einen JFrame nicht unter 10 MB Speicher. Wenn der Speicher wächst, löscht ihr zumindest teilweise eure Objekte nicht. Beispiel: ---------------- Es reicht nicht, einfach ein Panel auf null zu setzen, wenn auf dem Panel noch Components sind, an denen Listener registriert sind. Lösungen: Listener abmelden oder jede einzelne Componente auf null setzen. ---------------- Um sowas in seiner Anwendung feststellen zu können, kann man sogennte Profiler verwenden. z.B. Optimizeit von Borland oder JProbe von Quest. Gruß Jaraz Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.