Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Speicherfresser

Empfohlene Antworten

Veröffentlicht

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?

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

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

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

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.

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.