Dans ce tutoriel, nous découvrirons plusieurs collectionneurs de déchets existants. En Java, la collecte des ordures est un processus automatique qui peut remplacer les programmeurs par des tâches complexes telles que l'allocation de mémoire et le recyclage. Cet article est le troisième article de la série de tutoriels de la collection Garbage. Dans la partie précédente 2, nous avons vu comment fonctionne la collection Garbage en Java. C'est un article intéressant. Je vous recommande de jeter un œil. La première partie présente la collection Java Garbage, y compris principalement l'architecture JVM, le modèle de mémoire de tas et certains termes Java.
Java a quatre types de collectionneurs à ordures:
Collecteur de déchets en série
Collecteur de déchets parallèles
Collectionneur de déchets à balayage d'étiquette simultané (collecteur de déchets CMS)
Collectionneur G1 Garbage
Chaque type a ses propres forces et faiblesses. Surtout, lorsque nous programmons, nous pouvons sélectionner le type de collecteur des ordures via le JVM. Nous sélectionnons en passant par des paramètres au JVM. Chaque type est très différent et peut nous fournir des performances d'application complètement différentes. Il est très important de comprendre chaque type de collecteur de déchets et de faire le bon choix en fonction de la sélection des applications.
1. Collecteur de déchets en série
Le collecteur de déchets en série fonctionne en maintenant tous les threads de l'application. Il est conçu pour un environnement de thread unique et n'utilise qu'un seul thread pour la collecte des ordures, et fonctionne en congelant tous les threads d'application, de sorte qu'il peut ne pas convenir aux environnements de serveur. Il est mieux adapté aux programmes de ligne de commande simples.
Le collecteur de déchets en série peut être utilisé via le paramètre JVM -xx: + usageerialgc.
2. Collecteur de déchets parallèles
Le collecteur de déchets parallèles est également appelé débit-collecteur. Il s'agit du collectionneur de ordures par défaut pour JVM. Contrairement aux collectionneurs de déchets en série, il utilise le multithreading pour la collecte des ordures. De même, il gèle également tous les fils d'application lors de la collecte des ordures
3. Collecteur de déchets à balayage de marque simultanée
La collection de déchets d'étiquette simultanée utilise la numérisation multithread de la mémoire de tas, le marquage des instances qui doivent être nettoyées et le nettoyage des instances marquées. Le collecteur de déchets d'étiquette simultanée ne contiendra que tous les threads de l'application dans les deux cas suivants.
Lorsque l'objet de référence étiqueté est dans la zone titulaire;
Pendant la collecte des ordures, les données dans la mémoire du tas sont modifiées simultanément.
Le collecteur de déchets à balayage d'étiquette simultané utilise plus de processeur pour garantir le débit du programme que les collectionneurs de déchets parallèles. Si nous pouvons allouer plus de processeur pour de meilleures performances de programme, le balisage simultané sur le collecteur de déchets de scan est une meilleure option que le collecteur de déchets simultané.
Ouvrez le collecteur de déchets à balayage de marque simultanée via le paramètre JVM xx: + useParNewgc.
4. G1 Collecteur des ordures
Le collectionneur G1 Garbage convient aux situations où la mémoire du tas est grande. Il divise la mémoire du tas en différentes zones et les ordures le collectent simultanément. G1 peut également comprimer l'espace de mémoire du tas restant après la récupération de la mémoire. Le scan simultané marque la mémoire de la mémoire du collecteur des ordures dans le cas STW. La collection G1 Garbage donnera la priorité à la région avec le plus de déchets de la première pièce.
Utilisez G1 Garbage Collector via le paramètre JVM XX: + USEG1GC
Nouvelles fonctionnalités de Java8
Lorsque vous utilisez le collectionneur G1 Garbage, utilisez le paramètre JVM -XX: + USESTRINGDEDUPPLICATION. Nous pouvons optimiser la mémoire du tas en supprimant les chaînes en double et en ne gardant qu'un seul char []. Cette option a été introduite dans Java8u20.
Nous avons donné les quatre collectionneurs Java Garbage, dont il faut utiliser en fonction des scénarios d'application, des performances matérielles et des exigences de débit.
Configuration JVM pour la collecte des ordures
Les configurations de clés JVM suivantes sont toutes liées à la collection Java Garbage.
Type de collecteur de déchets en cours d'exécution
| Configuration | décrire |
|---|---|
| -Xx: + usageerialgc | Collecteur de déchets en série |
| -Xx: + useParallelgc | Collecteur de déchets parallèles |
| -Xx: + useConcmarksweepgc | Collecteur de déchets à balayage d'étiquette simultanée |
| -Xx: parallelcmsthreads = | Collecteur de déchets à scan à tag simultané = nombre de threads utilisés |
| -Xx: + useg1gc | Collectionneur G1 Garbage |
Configuration optimisée de GC
| Configuration | décrire |
|---|---|
| -Xms | Initialiser la taille de la mémoire du tas |
| -Xmx | Valeur de mémoire de tas maximale |
| -Xmn | Taille de la chronique |
| -Xx: permsize | Initialiser la taille de la génération permanente |
| -Xx: maxpermSize | Capacité maximale de génération permanente |
Exemple d'utilisation des paramètres JVM GC
java -xmx12m -xms3m -xmn1m -xx: permSize = 20m -xx: maxpermSize = 20m -xx: + useerialgc -jar java-application.jar
Résumer
Ce qui précède concerne une brève compréhension des types de collectionneurs Java Garbage dans cet article, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!