# Aufruf des Garbage-Collectors



## Guest (11. Feb 2007)

Hallo zusammen,

ich habe mich in letzter Zeit vermehrt mit der Speicherauslastung einer Webanwendung beschäftigt. Der Anwendung stehen 512MB Speicher zur Verfügung und mit dem passenden Monitoring kann man sehen wie diese 512MB nach und nach in Beschlag genommen werden. Wird eine bestimmte Grenze unterschritten (passiert meistens bei 5MB), so wird automatisch der Garbage Collector aufgerufen und es sind wieder ca. 400 MB von den 512 MB frei.

Kann man irgendwo einstellen (vermutlich per Start-Parameter) ab welcher Grenze der Garbage Collector aufgerufen wird? Also dass er nicht erst aufgerufen wird wenn nur noch 5 MB frei sind sondern schon wenn noch 20 MB frei sind?


----------



## HLX (12. Feb 2007)

Prinzipiell kann man in der Anwendung System.gc() aufrufen. Dann gibts ne full garbage Collaction. Ist allerdings nicht sehr performant.

Darf man fragen wozu das gut sein soll?


----------



## Guest (12. Feb 2007)

Das soll dazu dienen den Speicherverbrauch zu optimieren. Angenommen die Java VM hat sich von den verfügbaren 512 MB 300 MB reserviert. Nun gibt es in der Anwendung Methoden, die mit einem Schlag 20 oder 30 MB verbrauchen, die sich auch nicht weiter optimieren lassen. Wenn der freie Speicher nur noch 10 MB beträgt und eine solche Funktion wird aufgerufen, dann werden mehr als die 300 MB Speicher reserviert, weil der Garbage Collector erst nach der jeweiligen Aktion aufgerufen wird. Würde man die Grenze auf beispielsweise 40 MB erhöhen, würde das Problem nicht mehr auftreten und man würde dauerhaft mit 300 MB hinkommen.


----------



## AlArenal (12. Feb 2007)

HLX hat gesagt.:
			
		

> Prinzipiell kann man in der Anwendung System.gc() aufrufen. Dann gibts ne full garbage Collaction. Ist allerdings nicht sehr performant.



Prinzipiell ist diese Aussage so nicht korrekt, denn du kannst System.gc() aufrufen so oft wie du willst, die Reaktion der VM auf den Aufruf ist aber nicht garantiert. Der Aufruf signalisiert dem System lediglich einen Wunsch. Ob es in der Laune ist dir diesen zum Zeitpunkt des Aufrufs oder sonst irgendwann zu erfüllen, entscheidet es dennoch selbst.


----------



## HLX (12. Feb 2007)

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#gc() hat gesagt.:
			
		

> *Runs the garbage collector. *Calling this method suggests that the Java virtual machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. *When control returns from the method call, the virtual machine has made its best effort to recycle all discarded objects. *



Nur der Erfolg kann nicht sichergestellt werden, die Methode wird aber trotzdem ausgeführt.


----------

