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
예, 당신은 조금 순진합니다. GC는 멀티 프로세서 시스템에서 일부 GC 알고리즘으로 줄일 수 있지만 CPU 수에 관계없이 항상 대기 시간을 발생시킵니다. 낮은 대기 시간을 보장하려면 Java를 피하십시오. (그리고 바람직하지 않은 모든 비 실시간 OS들.) – biziclop
주제에서 약간 벗어난, 따라서 코멘트. "그렇다면 제대로 생각하고 있다면 프로세서 당 최대 하나의 스레드를 갖고 싶습니다" 스레드가 100 % 항상 작동하고 잠금을 사용하지 않는다면 실제로 생각만큼 좋은 생각은 아닙니다. I/O 또는 다른 것. 물론 과용하지 말아야하지만 대부분의 경우 코어 수나 HW 스레드 수만큼 스레드 수를 줄이려고하면 CPU를 최대한 활용하지 못할 것입니다. – Fredrik
"대기 시간이 많이 걸리는 컨텍스트 전환을 피하려고합니다." 그거야? 측정 했니? – EJP