Les quelques rares situations qui justifient un appel � System.gc() sont celles ou, du fait de la taille importante de la heap (plusieurs centaines de Mo) et des 'freeze' de l'appli que cela engendre, il est important de s'assurer qu'une phase critique de l'application ne sera pas compromise du fait d'une m�moire trop fragment�e ou d'une pause trop longue de GC. Ceci dit, il n'est pas possible de garantir qu'un GC ne se d�clenchera pas pendant une p�riode donn�e. Aucun d�terminisme sur les activit�s d'un GC n'est possible.
Par contre, il peut etre utile de faire un minimum de tuning sur la JVM: taille de heap de d�but et max, taille des g�n�rations, etc... Ces recommandations sur ces options varient selon les JVM, leurs versions et les OS. Pour les JVM HotSpot: http://java.sun.com/docs/hotspot/gc/index.html En tout cas, la premi�re �tape consiste � effectuer des runs avec un -Xverbose:gc pour se rendre compte du temps maximum et total pass� par l'application en GC. D'une mani�re g�n�rale, dans un environnement J2EE, il est pr�f�rable que seul le serveur d'applications (dont le role principal est de g�rer la bonne utilisation des ressources syst�me) effectue des appels au GC dans des circonstances tr�s particuli�res et rares. Les appels p�riodiques au GC, qui pouvaient etre recommand�s il y a qq temps avec certaines JVM ne sont plus d'actualit�. Par contre, positionner des variables � 'null' reste un utile. L'appel des finaliseurs est une fonction de l'algorithme du GC, donc assez peu portable et peu pr�dictible. La m�thode runFinalization() augmente les chances d'ex�cution des finaliseurs, mais ne peut le garantir. Pourquoi utilises-tu des finaliseurs? Cdlt, Alexis Olivier LAMY wrote: > Bonjour, > Dans un but d'optimisation, je me pose des questions quant � l'utilit� de > System.gc(); ? > Mon cas, une servlet re�oit des messages SOAP. Celle-ci cr�� un objet de > traitement et renvoie une r�ponse. Cet objet de traitement cr�� de multiples > beans (avec des acc�s SGBD). > Je me demandais donc si apr�s mes diff�rents traitements et avant le return > de ma servlet, l'utilisation de System.gc(); �tait appropri�e ou totalement > inutile ? > Ou alors faut-il utiliser runFinalization() qui n'est pas lanc� en t�che de > fond mais attend la fin avant de continuer ? > Mon application tourne sous jaguar CTS3.6.1 (jdk 1.3 je crois). > > Olivier
