Con JRockit, se puede obtener la lista completa de los hilos de ninguna manera, y todos estos medios incluyen información sobre el Tema (s) Recolección de basura:Con las JVM recientes de Sun (1.6), ¿es posible obtener información de subprocesos de GC?
1) Pedir a la clase Thread
de la información:
Thread.getAllStackTraces();
2) Utilizando ThreadGroup
para obtener esa información:
ThreadGroup root = Thread.currentThread().getThreadGroup();
while (root.getParent() != null) {
root = root.getParent();
}
Thread[] list = new Thread[root.activeCount() + 5];
root.enumerate(list, true);
3) el uso de JMX para obtener la lista:
ThreadMXBean THREAD_MX_BEAN = ManagementFactory.getThreadMXBean();
long[] tids = THREAD_MX_BEAN.getAllThreadIds();
ThreadInfo[] tinfos = THREAD_MX_BEAN.getThreadInfo(tids);
4) CTRL-BREAK
Sin embargo, el uso de la JVM de Sun - al menos reciente de Java 6 versiones - solamente CTRL-BREAK parece que se incluyen los hilos de recolección de basura y el hilo VM periódica de tareas. Me resulta útil para controlar la CPU utilizada por los subprocesos GC para que mi aplicación pueda detectar y registrar cuando GC está usando la mayor parte del tiempo de la CPU. Sin esta información, solo sabrá cuándo GC excede ciertos umbrales establecidos.
Si solo puedo encontrar el ID de subproceso de los subprocesos de GC, entonces JMX probablemente dará el resto de la información que necesito (a menos que haya algo diferente acerca de estos subprocesos). Por ejemplo, usando el método:
long threadId = tids[0];
long cpuTime = THREAD_MX_BEAN.getThreadCpuTime(threadId);
¿Alguien sabe cómo - o si se sabe que no es posible - para obtener información sobre el hilo (s) de recolección de basura utilizando la JVM de Sun?
Sí, pero esto no me ayuda * programáticamente * obtener información acerca de GC Threads. Pero, por supuesto, el resultado detallado al que se refiere puede analizarse después del hecho, seguro. – Eddie
Con JRockit, la lista de subprocesos que puede obtener de varias maneras incluye los subprocesos de GC, y luego puede usar JMX para obtener el tiempo de CPU consumido por cada subproceso de GC. Con Sun JVM, los hilos GC no aparecen incluidos en ninguna lista de hilos. – Eddie