2013-04-10 2 views

답변

0

일반적으로 gc는 별도의 스레드에서 실행됩니다. 그러나 일반적으로 큰 차이는 없습니다. 그게 다야.

+0

별도의 스레드에서 실행되는 GC는 성능면에서 대폭 개선되었습니다. – Gray

+0

@ 그레이 그것은 프로그램의 종류에 따라 달라집니다 - 객체가 어떻게 만들어 지는지, 얼마나 많이 그리고 얼마나 오래 살아 가는지. – kan

+0

실제로. 그러나 그것이 "중요한 차이"를 만들어 내지 않는다고 말하는 것은 IMHO입니다. – Gray

13

Java 프로그램의 단일 스레드가 자동으로 CPU에서 여러 코어를 사용할 수 있습니까?

예 아니오. 단일 스레드 Java 프로그램은 GC, JMX, finalizer 및 기타 백그라운드 스레드가 다른 CPU (CPU 또는 코어)에서 실행될 수 있다는 점에서 여러 스레드를 사용합니다. GC 스레드는 특히 다른 CPU에서 실행될 수있는 경우 상당한 성능 향상을 제공합니다. 그러나 단일 스레드 응용 프로그램은 일 수 있지만 CPU간에을 이동하면 동시에 2 개의 CPU에서 실행되지 않습니다.

어떻게 알 수 있습니까?

더 어려운 질문이며 실행중인 아키텍처에 따라 다릅니다. * nix에서 ps은 실행 대기열에 여러 개의 스레드가 있지만 실제로 여러 개의 CPU에서 실행 중임을 표시하지 않을 수도 있습니다.

+0

다중 코어를 의미하는 것이 아니라 다중 물리적 CPU를 의미합니다. – user697911

+0

같은 대답 @ user697911. JVM에서 코어/CPU 구분은 대부분 OS에 의해 완전히 숨겨져 있지는 않습니다. – Gray

+1

OS는 코어와 CPU의 차이점을 알고있을 수 있지만 JVM은 논리적 CPU 만 인식합니다. –

1

정의에 의한 단일 스레드 인 경우 고유 한 코드가 여러 코어에서 실행되지 않습니다. 다중 코어에서 동시에 실행될 수있는 단일 스레드 응용 프로그램은 없습니다. 모르는 상태에서 다중 스레드 호출/라이브러리를 사용하지 않는 한.

+0

내 애플리케이션을 더 빠르게 만들려면 다중 스레드로 만들어야합니까? 내 컴퓨터에는 16 개의 코어가 있고 하나의 코어는 100 % 이상의 CPU를 사용했지만 다른 하나는 무료입니다. 응용 프로그램이 매우 느립니다. – user697911

+0

예, 알고리즘을 작성하여 스레드간에 작업이 분할되도록하는 방법을 알아야합니다. 예를 들어 for 루프를 사용하여 160 개의 요소 배열에 무언가를 수행하면 각각 10 개의 요소에서 작동하는 16 개의 스레드를 생성 할 수 있습니다. 그러나 이전 계산에 향후 계산이 필요하지 않은지 확인해야합니다. 예를 들어, 160 일이 넘는 총 이익을 계산할 경우 매일 계산할 때 이전 계산이 필요합니다. –

+0

다중 스레드를 사용하면 더 많은 메모리가 사용됩니까? – user697911

관련 문제