2011-03-03 19 views

Respuesta

12

Esto imprimirá una lista de todos los Recolectores de basura actualmente cargados en su JVM.

import java.lang.management.*; 
import java.util.List; 

public class x { 
    public static void main(String args[]) { 
     List<GarbageCollectorMXBean> l = ManagementFactory.getGarbageCollectorMXBeans(); 
     for(GarbageCollectorMXBean b : l) { 
      System.out.println(b.getName()); 
     } 
    } 
} 
+0

Gracias. Esto ayudó mucho. – user640121

4

¿Es JConsole lo que buscas?

Extracto:

basura colector información: Información sobre GC, incluyendo los nombres de colector de basura, número de colecciones realizadas, y el total de tiempo dedicado a la realización de GC.

+0

bueno, solo quiero saber cuándo estoy pateando los procesos de Java, qué es el recolector de basura que se está utilizando. Tengo un problema de OutOfMemory que ocurre cuando uso una versión más reciente (1.6.0_20) de la jre. Con la versión anterior (1.6.0_5) no veo el problema. La prueba que estoy ejecutando es, por supuesto, consistente. Mi suposición es que esto podría estar relacionado con el colector de basura que se usa. He buscado mucho en la red, pero no he podido encontrar una manera de decir qué gc se usa en una versión particular de jre por defecto. – user640121

0

Creo que la respuesta es que no se puede decir directamente cuál es el recolector de basura predeterminado. Puede decir qué recolectores de basura se utilizan actualmente en la JVM actual, pero eso depende de otros factores ... como las opciones de JVM ... por lo que no puede inferir confiablemente el GC predeterminado de eso.

otra parte (no obstante lo que dice @Lucas), infiriendo (fiable) lo que es el valor por defecto por otros medios serían difíciles:

  • Como @Lucas señala, el valor por defecto depende de si las caídas de máquinas en la categoría "clase de servidor", y en algunos casos eso depende de las propiedades físicas de la máquina que son imposibles de acceder de forma portátil.

  • La documentación del proceso es fragmentaria, y no necesariamente totalmente confiable.

  • El comportamiento (clasificación de "clase de servidor", GC predeterminado por clase, etc.) puede depender de la versión de Java. De hecho, puede incluso cambiar con los parches de JVM.

OMI, un mejor enfoque sería establecer explícitamente las opciones de JVM al poner en marcha el proceso hijo, y no se basan en los valores por defecto. Alternativamente, simplemente vaya con lo que sea el predeterminado.

+0

¿Por qué downvote aleatorio? –