С помощью JRockit вы можете получить полный список потоков любыми способами, и все эти средства включают информацию о потоках сбора мусора:
1) Запрос класса Thread
дляинформация:
Thread.getAllStackTraces();
2) Использование ThreadGroup
для получения этой информации:
ThreadGroup root = Thread.currentThread().getThreadGroup();
while (root.getParent() != null) {
root = root.getParent();
}
Thread[] list = new Thread[root.activeCount() + 5];
root.enumerate(list, true);
3) Использование JMX для получения списка:
ThreadMXBean THREAD_MX_BEAN = ManagementFactory.getThreadMXBean();
long[] tids = THREAD_MX_BEAN.getAllThreadIds();
ThreadInfo[] tinfos = THREAD_MX_BEAN.getThreadInfo(tids);
4CTRL-BREAK
Однако при использовании JVM Sun - по крайней мере, в последних выпусках Java 6 - только CTRL-BREAK включает потоки сборки мусора и поток периодических задач VM.Я считаю полезным следить за процессором, используемым потоками GC, чтобы мое приложение могло определять и регистрировать, когда GC использует большую часть процессорного времени.Без этой информации вы узнаете только, когда GC превысит определенные установленные пороговые значения.
Если я даже смогу просто узнать идентификатор потока потоков GC, то JMX, вероятно, выдаст остальную информацию, которая мне нужна (есличто-то другое в этих темах).Например, используя метод:
long threadId = tids[0];
long cpuTime = THREAD_MX_BEAN.getThreadCpuTime(threadId);
Кто-нибудь знает, как - или если известно, что это невозможно - получить информацию о Потоке (ах) сбора мусора с помощью Sun JVM?