83 votes

trouver quel type de ramasse-miettes est en cours d'exécution

Post JSE 5 Ergonomics est conçu pour sélectionner automatiquement le type de collecteur de place le mieux adapté à votre situation (entre autres).

J'aimerais savoir s'il existe un moyen de confirmer / connaître le type de ramasse-miettes et les objectifs de performance choisis / définis par l'ergonomie de la machine virtuelle Java.

108voto

Darren Points 171
 java -XX:+PrintCommandLineFlags -version
 

va vous montrer le ramasse-miettes par défaut. J'ai également trouvé utile la page suivante, qui détaille le ramasse-miettes par défaut pour différents systèmes d'exploitation.

http://www.techpaste.com/2012/02/default-jvm-settings-gc-jit-java-heap-sizes-xms-xmx-operating-systems/#more-3569

25voto

Ankit Dimania Points 59
 import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.util.List;

public class GCInformation {

    public static void main(String[] args) {
            try {
                    List<GarbageCollectorMXBean> gcMxBeans = ManagementFactory.getGarbageCollectorMXBeans();

                    for (GarbageCollectorMXBean gcMxBean : gcMxBeans) {
                            System.out.println(gcMxBean.getName());
                            System.out.println(gcMxBean.getObjectName());
                    }

            } catch (RuntimeException re) {
                    throw re;
            } catch (Exception exp) {
                    throw new RuntimeException(exp);
            }
    }
}
 

par exemple, essayez de suivre les commandes pour connaître différents types de GC

 java -XX:+PrintCommandLineFlags  GCInformation
java -XX:+PrintCommandLineFlags -XX:+UseParallelGC GCInformation
java -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC -XX:+UseParNewGC GCInformation
java -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC -XX:-UseParNewGC GCInformation
 

10voto

Lucas Zamboulis Points 2024

Pas une réponse directe à votre question, mais je crois que c'est ce que vous cherchez.

Selon la version 6 de Java documents 1 et 2 (et pas seulement de Java 5):

Référence 1 dit:

Sur le serveur de classe des machines de course de la serveur de VM, le garbage collector (GC) a changé à partir de la précédente série collecteur [...] à un collecteur parallèle

Référence 2 dit:

Départ avec J2SE 5.0, lorsqu'un l'application démarre, l'écran de lancement peut tenter de détecter si l' l'application est en cours d'exécution sur un "le serveur de classe" de la machine et, le cas échéant, l'utilisation la Java HotSpot Virtuel du Serveur Machine (serveur de VM) au lieu de la Java HotSpot Client De La Machine Virtuelle (client VM).

Aussi, la référence 2 , dit:

Remarque: Pour Java SE 6, la définition de un ordinateur serveur est l'un avec au moins de 2 Processeurs et au moins 2 go de la mémoire physique.

À partir de cette information, vous pouvez savoir que si la box est un serveur (d'après 2), puis il sera à l'aide de la parallèle GC. Vous pouvez aussi déduire qu'il ne changera pas de GC au cours de l'exécution.

Vous pouvez probablement trouver la bonne réponse pour les non-serveur de machines si vous creusez plus loin dans la documentation.

1voto

bkail Points 16610

Utilisez le GarbageCollectorMXBean s pour obtenir MemoryPoolMXBean s.

1voto

Chris Dennett Points 12396

Voici quelques informations sur la façon d’obtenir des informations sur le GC par programme, mais il semble que le nom du GC puisse être requis au préalable. Gênant.

http://blogs.oracle.com/poonam/entry/how_to_programmatically_obtain_gc

Edit: essayez ManagementFactory.getGarbageCollectorMXBeans() et parcourez la liste renvoyée. L'un d'entre eux sera actif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X