2D-Grafik repaint(); steigender RAM Verbauch

Hallo miteinander,

kurz davor: Falls schonmal dieses Thema angesprochen worden ist bzw. eine Lösung dafür vorhanden ist, bitte die Lösung oder den Link hier posten. Ich habe die Suchfunktion sowie Google verwendet aber nichts brauchbares gefunden.

Mein Problem.

Ich habe mir ein neues JComponent gemacht. Diese beinhaltet einen Wert welcher für Animationszwecken verwendet wird. Die Komponente schaut der CPU-Auslastungs-Anzeige vom Windows Taskmanager ähnlich. Alles funktioniert so wie ich es will. Ich kann die Werte updaten. Jedoch bin ich draufgekommen das bei jedem
Java:
repaint();
Aufruf die Speichernutzung um 4 Byte steigt.

Liegt das wirklich an der repaint(); Methode oder habe ich einen Fehler in der paintComponent(); Methode?

Hier ist der Code:

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JLabel;

public class DiagrammComponent extends JLabel {

	private static final long serialVersionUID = 4474262895515854218L;

	int[] values = new int[100];

	public DiagrammComponent() {
		for (int i = 0; i < values.length; i++) {
			values[i] = 0;
		}
		this.setBackground(Color.black);
	}

	public void updateValues(int newValue) {
		for (int i = values.length - 1; i >= 1; i--) {
			values[i] = values[i - 1];
		}
		values[0] = newValue;
		repaint();
	}

	int currentFrame = 0;
	int a = 0;

	@Override
	public void paintComponent(Graphics g) {
		g.setColor(new Color(0xafafaf));
		g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
		a = (int) (getHeight() * 0.2);
		g.setColor(new Color(0x64aabc));
		for (int i = 1; i < 5; i++) {
			g.drawLine(0, a * i, getWidth() - 1, a * i);
		}
		for (int i = 1; i < (getWidth() / a) + 1; i++) {
			if ((getWidth() / 100 * currentFrame) == a) {
				currentFrame = 0;
			}
			g.drawLine(a * i - (getWidth() / 100 * currentFrame), 0, a * i - (getWidth() / 100 * currentFrame), getHeight());
		}

		g.setColor(new Color(0x047c9a));
		for (int i = 0; i < values.length - 1; i++) {
			g.drawLine(getWidth() - (getWidth() * i / 100), getHeight() - (getHeight() * values[i] / 100) - 2, getWidth() - (getWidth() * (i + 1) / 100), getHeight()
					- (getHeight() * values[i + 1] / 100) - 2);
		}

		g.setColor(Color.gray);
		g.draw3DRect(0, 0, getWidth() - 1, getHeight() - 1, false);

		currentFrame++;
	}
}

Die updateValue(); Methode wird über einen 100 Ms Thread aufgerufen.

Ich habe schon paintComponent(getGraphics()); versucht, jedoch ergibt das nur eine NullPointerException.

Wäre froh wenn mir da jemand helfen könnte.

Gruß PNGamingPower
 

bERt0r

Top Contributor
4 Byte ?!?! Was erwartest du denn, du erstellst ein paar neue Color Objekte in jedem Paint durchlauf. Das is ja auch nicht die Welt, der GC wird sie schon irgendwann mal wegräumen... Ich hab mir den Spass gemacht und schnell gerechnet: in ca 310 Tagen müllt dein Programm 1 GB Speicher zu. Da wird der Garbage Collector doch irgendwann mal Zeit finden...
 

bERt0r

Top Contributor
Und stößt du dadurch an irgendwelche Performancegrenzen? Du musst auch wissen, wenn du repaint mehrere Male schnell hintereinander aufrufst, verzichtet der RepaintManager (der das zeichnen dann übernimmt) einfach auf ein paar Aufrufe.
 

Marco13

Top Contributor
Der Taskmanager ist kein Profiler, d.h. aus dem, was der anzeigt, kann man nicht wirklich Informationen ziehen. Im Zweifelsfall könne man mit einem Profiler schauen, ob es ein Memory Leak gibt (dafür würde es VisualVM schon tun). Aber bis dahin sind diese Schwankungen nur "Rauschen": Wenn du deine Anwendung sehr lange laufen läßt, könnte der Speicherverbrauch scheinbar ansteigen, bis zum mit -Xmx angegebenen Wert - aber dann nicht weiter. Und selbst der Heap-Size im Profiler kann steigen, aber fällt ggf. wieder wenn der GC kommt. Solange kein OutOfMemoryError fliegt, brauchst du dir da nicht sooo viele Gedanken zu machen.
 
Nein die Aktualisierungen sind flüssig. Nur der RAM Verbrauch geht nach oben.

Nach ein paar Versuchen habe ich herausgefunden, dass die Komponente neu gezeichnet wurde [STRIKE]nachdem ich mit der Maus aus dem JFrame raus und wieder rein gefahren bin.[/STRIKE]
EDIT: nachdem ich ich mit der Maus aus dem Tab wo die Komponente drinnen ist rausgefahren bin.

[STRIKE]Liegt das am repaint des JFrames?[/STRIKE]
Weißt du wie es dazu kommt? Kommt das durch das neuzeichnen des Tabs?

EDIT 2: Eine weitere Beobachtung war, dass die Speicherauslastung bei egal welcher Komponente immer beim repaint(); steigt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
G Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
V Swing Bei repaint() tut sich nichts AWT, Swing, JavaFX & SWT 7
G ColorReader, bei Fadenkreuz zeichnen mit repaint() flackern AWT, Swing, JavaFX & SWT 19
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
D Swing Actionlistener verhindert repaint?! AWT, Swing, JavaFX & SWT 2
S JLabel repaint AWT, Swing, JavaFX & SWT 8
C Swing Linux mag mein Swing-repaint() nicht... AWT, Swing, JavaFX & SWT 7
J Swing paintComponent() - repaint() - BufferedImage anzeigen AWT, Swing, JavaFX & SWT 5
Luk10 repaint() auch in anderen Klassen! AWT, Swing, JavaFX & SWT 6
A repaint() zu langsam, bitte um alternativen AWT, Swing, JavaFX & SWT 5
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
O Girdbag Formatierung nach repaint verloren AWT, Swing, JavaFX & SWT 2
E Swing - repaint() AWT, Swing, JavaFX & SWT 6
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Fragen zu Swing, paintComponent() und repaint AWT, Swing, JavaFX & SWT 6
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
A Swing Infinite repaint loop unterbrechen AWT, Swing, JavaFX & SWT 7
hdi Swing EDT macht kein repaint() AWT, Swing, JavaFX & SWT 2
F "Verrutschen" von Komponenten bei repaint() AWT, Swing, JavaFX & SWT 9
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
T Fenster wird trotz repaint() und revalidate() nicht sofort neu gezeichnet AWT, Swing, JavaFX & SWT 6
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3
C Frame repaint hat keine Wirkung AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben