2017-09-17 19 views
1

업데이트

이 질문을하는 다른 방법은 "코어가있는 것보다 더 많은 스레드를 응용 프로그램에 사용할 수 있습니까?"입니다.VisualVM이 VisualVM 자체에 대해 50 개의 스레드를 실행하는 이유는 무엇입니까?

원래 질문

나는 내 노트북에 총 8 개의 코어를 가지고 있습니다. 방금 VisualVM의 최신 버전을 다운로드하고 수행 방법을 보려면 VisualVM 탭을 클릭하십시오. 내가 알아챈 것 중 하나는 32 개의 라이브 스레드와 22 개의 데몬 스레드를 사용한다는 것입니다. 왜 그렇게 많은 것을 사용합니까? IIUC는 8 개 이상을 사용하는 것이 덜 효율적이며 JUC는 내가 가지고있는 코어의 수를 알고 있으므로 스레드의 총 수를 8 개로 제한 할 수 있습니다.

누군가가 이것을 중복으로 표시 했으므로 내가 조금 다른 방식으로 묻는 것. VisualVM의 특정 기능을 사용하는 방법을 묻지 않습니다. 나는 8 개 이상의 스레드를 실행하는 이유를 묻고 있는데, IIUC는 8 개 이상이 최적화되지 않았고 VisualVM은 오라클에서 제공되므로 최적으로 기능하도록 설계 했으므로 뭔가 놓치고 있는지 궁금합니다. , 아니면 오라클이 실행해야하는 것보다 많은 스레드로 실행할 수 있도록 허용하고 있습니까?

+1

[Visual VM에서 프로파일 링 제한] (https://stackoverflow.com/questions/770851/limiting-profiling-in-visual-vm) – IddoE

+0

의 가능한 복제본 "프로파일 된 스레드 제한. 항상 32"https : // blogs.oracle.com/nbprofiler/profiling-with-visualvm,-part-2 – IddoE

답변

1

VisualVM 실행중인 스레드가 50 개이기 때문에 모든 스레드가 동시에 활발히 작동해야한다는 의미는 아닙니다. "실행 중"열을 정렬하면 처음 7 개 또는 8 개 스레드 만 실행 중임을 알 수 있습니다. 스레드의 나머지는 잠자고 있거나 I/O를 기다리고 있습니다.

+0

* 여분의 스레드가 수행하는 작업이 더 도움이 될 것이라고 대답 : "I/O 대기 중"이 올바른 방향이지만 여전히 모호하다. – javadba

+0

당신의 답은 의미가 있습니다. - 그러나 동시 자바 솔루션 설계 방법에 대한 현재의 이해를 바탕으로 여전히 설계 결함이있는 것 같습니다. 오라클이 이것을 만들었 기 때문에, 내가 알지 못하는 것을 그들이 알고 있는지 궁금해하고 있습니다. 특히 나는 전체 애플 리케이션을 위해이 경우 최대 8 개의 쓰레드를 가진 공유 집행자 풀을 사용하지 않은 이유가 무엇인지 궁금해하고 있습니다 - 그들이하는 일에 약간의 이점이 있습니까? – Ole

+0

코어 수보다 많은 스레드 수가있는 것은 아무 문제가 없습니다. 오라클뿐 아니라 실제로 표준 작업입니다. 장점은, 말했듯이, 그 스레드가 현재 I/O 또는 뭔가를 기다리고 있기 때문에 하나의 CPU 코어가 사용 가능할 때 유휴 상태가 아닌 다른 스레드를 여전히 처리 할 수 ​​있다는 것입니다. – VHS