Сколько потоков JVM разветвляет при запуске? - PullRequest
0 голосов
/ 29 марта 2012

Я просто пытаюсь избежать переключения контекста, поскольку это приводит к большой задержке. Так что, если я так думаю, я хочу иметь максимум один поток на процессор. Если процессор поддерживает виртуальный параллелизм (гиперпоточность, я думаю, что это имя!), Тогда у меня может быть двойное число потоков.

Пример: 4 процессора с гиперпоточностью = максимум 8 потоков.

Конечно, ОС также нуждается в процессоре, поэтому я, возможно, наивен здесь.

В любом случае, знание количества потоков, создаваемых JVM при запуске, является хорошим началом.

1 Ответ

4 голосов
/ 29 марта 2012

JVM запускает только 1 пользовательский поток, также называемый «основным» потоком. За кулисами работают другие потоки, такие как сборщики мусора, компиляторы, оптимизаторы, финализаторы и т. Д.

Быстрый взгляд на дамп потока для небольшого приложения:

public static void main(String[] args) throws Exception {
    Thread.sleep(100000);
}

Показывает:

"Low Memory Detector" daemon prio=5 tid=7f810c801000]
"C2 CompilerThread1" daemon prio=9 tid=7f810c800000
"C2 CompilerThread0" daemon prio=9 tid=7f8107037000
"Signal Dispatcher" daemon prio=9 tid=7f8107036000
"Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=7f8107801000 
"Finalizer" daemon prio=8 tid=7f810882a000 nid=0x1118cb000 
"Reference Handler" daemon prio=10 tid=7f8108829000 nid=0x1117c8000 
"main" prio=5 tid=7f8104801000 nid=0x109a52000 waiting on condition
"VM Thread" prio=9 tid=7f8108824800 nid=0x1116c5000 runnable 
"Gang worker#0 (Parallel GC Threads)" prio=9 tid=7f8104802800
"Gang worker#1 (Parallel GC Threads)" prio=9 tid=7f8104803000 
"Gang worker#2 (Parallel GC Threads)" prio=9 tid=7f8104803800 
"Gang worker#3 (Parallel GC Threads)" prio=9 tid=7f8107800000 
"Gang worker#4 (Parallel GC Threads)" prio=9 tid=7f8108800000 
"Gang worker#5 (Parallel GC Threads)" prio=9 tid=7f8107000800
"Gang worker#6 (Parallel GC Threads)" prio=9 tid=7f8107001000
"Gang worker#7 (Parallel GC Threads)" prio=9 tid=7f8107002000 
"Concurrent Mark-Sweep GC Thread" prio=9 tid=7f810701c000
"Gang worker#0 (Parallel CMS Threads)" prio=9 tid=7f81090c3000
"Gang worker#1 (Parallel CMS Threads)" prio=9 tid=7f810701b800
"VM Periodic Task Thread" prio=10 tid=7f810c812800 
"Exception Catcher Thread" prio=10 tid=7f8104801800
...