EXEMPLE : SmartGC utilise un serveur ATL pour déclencher le nettoyage de la mémoire Java

Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).

Résumé

Les applications JAVA peuvent enregistrer un récepteur auprès du serveur ATL (ActiveX Template Library) JVMmem, qui analyse périodiquement la charge de la mémoire. Lorsqu'un seuil de mémoire est dépassé, le serveur déclenche un événement de notification à l'application JAVA afin de signaler que le Garbage Collector Java doit être invoqué.


SmartGC.exe fournit une fondation pour les applications JAVA leur permettant de contrôler plus efficacement le nettoyage de la mémoire. Le nettoyage de la mémoire Java étant déclenché par l'utilisation de la mémoire virtuelle, certaines applications peuvent s'exécuter plus efficacement si le nettoyage de la mémoire est déclenché en fonction de la mémoire vive disponible ou de la taille du jeu de travail.

Plus d'informations

Vous pouvez télécharger les fichiers suivants à partir du Centre de téléchargement Microsoft (en anglais) :
Pour plus d'informations sur la façon de télécharger des fichiers du Support technique Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
119591 Comment obtenir des fichiers de support technique Microsoft auprès des services en ligne
Microsoft a analysé ce fichier en vue de détecter la présence de virus. Microsoft a utilisé les logiciels de détection de virus les plus récents disponibles à la date de publication de ce fichier. Le fichier est conservé sur des serveurs sécurisés, empêchant toute modification non autorisée du fichier.
Fichiers SmartGCTaille en octets
CCheckMem.h 1866
CheckMem.cpp 3779
CheckMem.h 2193
CheckMem.rgs 637
dlldata.c 839
JVMmemMod.aps 3736
JVMmemMod.cpp 1970
JVMmemMod.def 226
JVMmemMod.dsp 13088
JVMmemMod.dsw 541
JVMmemMod.h 19900
JVMmemMod.idl 2430
JVMmemMod.rc 2861
JVMmemMod.tlb 3376
JVMmemModCP.h 917
JVMmemModps.def 251
JVMmemModps.mk 478
JVMmemMod_i.c 1272
JVMmemMod_p.c 21624
memory.pmc 758
PSAPI.H 4172
PSAPI.LIB 19790
resource.h 502
rm.cpp 0
StdAfx.cpp 315
StdAfx.h 908

Les étapes suivantes expliquent comment utiliser SmartGC.exe.
  1. Générez le projet ATL. La DLL du serveur ATL JVMmem est alors créée et enregistrée.
  2. Ouvrez le projet Java, sélectionnez Ajouter un wrapper COM dans le menu Projet.
  3. Sélectionnez JVMmemMod 1.0 Type Library dans la liste de composants COM installés.
  4. Générez l'exemple.
Vous obtiendrez de meilleurs résultats si vous exécutez l'exemple à l'extérieur de l'environnement de développement intégré Visual J++, c'est-à-dire à partir de l'Explorateur :


  1. Cliquez plusieurs fois sur le bouton Créer jusqu'à ce que la mémoire physique disponible actuelle soit au moins inférieure de 5 Mo à la mémoire physique disponible initiale.
  2. Cliquez sur Supprimer tout. Cela initialisera le serveur JVMmem pour analyser la mémoire physique disponible.
Après environ une minute, 'Objet Cnt:' devrait correspondre à 'Vector Cnt:' et le jeu de travail actuel et la mémoire physique disponible devraient revenir près des niveaux initiaux.

REMARQUE : tous les passages de cet article relatifs à la mémoire supposent que les autres applications ne consomment pas plus de mémoire pendant que vous effectuez le test. Évidemment, si vous démarrez plusieurs grosses applications, la mémoire disponible actuelle baissera quelle que soit l'activité GC sur le test.

Il faudra peut-être quelque temps pour que la mémoire disponible actuelle et le jeu de travail actuel reviennent aux niveaux initiaux, car Windows NT ne tronque pas immédiatement le jeu de travail actuel s'il n'y a aucun besoin de RAM.

Notez que le programme appelle SetProcessWorkingSetSize dans le constructeur pour encourager Windows NT à limiter le jeu de travail maximal.

Utilisez les étapes suivantes pour vérifier si la routine de réception GC force réellement la libération de mémoire et d'objets :

  1. Cliquez sur le bouton Stop Timer (Arrêter le minuteur). Notez que le bouton devient alors "Start Timer" (Démarrer le minuteur).
  2. Créez et supprimez plusieurs objets de façon que le nombre d'objets soit égal à 30 mais le nombre de vecteurs égal à zéro. La mémoire et les objets ne seront pas nettoyés de la mémoire.
  3. Après avoir attendu de façon à être sûr qu'aucun nettoyage de la mémoire n'aura lieu, cliquez sur bouton Start Timer (Démarrer le minuteur). Après moins d'une minute, vous devriez voir le nombre d'objets revenir à zéro et la mémoire correspondante libérée.

Références

Pour plus d'informations, consultez l'article suivant dans la Base de connaissances Microsoft :
231183 EXEMPLE : Nettoyage automatique de ressources Java avec Gc.exe
Pour obtenir les articles les plus récents de la Base de connaissances Microsoft ainsi que des informations complémentaires du support technique relatives à Visual J++ et au Kit de développement (SDK) pour Java, reportez-vous aux sites Web de Microsoft aux adresses suivantes (en anglais) :
Propriétés

ID d'article : 231294 - Dernière mise à jour : 13 sept. 2005 - Révision : 1

Commentaires