자바:VM은 32비트 프로세서에서 64비트 'long'을 어떻게 처리합니까?

StackOverflow https://stackoverflow.com/questions/237309

  •  04-07-2019
  •  | 
  •  

문제

JVM은 32비트 프로세서에서 64비트인 기본 "long"을 어떻게 처리합니까?


멀티 코어 32비트 시스템에서 다중 코어를 병렬로 활용할 수 있습니까?
32비트 시스템에서 64비트 작업이 얼마나 느립니까?

도움이 되었습니까?

해결책

여러 코어를 사용하여 다양한 스레드를 실행할 수 있지만 64비트 계산에서는 병렬로 사용하지 않습니다.64비트 길이는 기본적으로 두 개의 32비트 정수로 저장됩니다.이를 추가하려면 캐리 비트를 추적하는 두 가지 추가가 필요합니다.곱셈은 ​​각 숫자가 10진수가 아닌 2^32진수라는 점을 제외하면 두 자리 숫자 두 개를 곱하는 것과 비슷합니다.다른 산술 연산도 마찬가지입니다.

속도에 대한 편집:속도 차이에 대해서만 추측할 수 있습니다.덧셈에는 1개가 아닌 2개의 덧셈이 필요하고, 곱셈에는 1개가 아닌 4개의 곱셈이 필요합니다.그러나 모든 것을 레지스터에 보관할 수 있다면 실제 계산 시간은 읽기를 위해 두 번, 쓰기를 위해 두 번 메모리에 이동하는 데 필요한 시간만큼 작아질 것이라고 생각합니다. 따라서 내 추측은 대부분의 경우 약 두 배 정도 길어집니다. 운영.프로세서, 특정 JVM 구현, 달의 위상 등에 따라 달라질 것이라고 생각합니다.엄청난 숫자 처리를 수행하지 않는 한 걱정할 필요는 없습니다.대부분의 프로그램은 디스크 또는 네트워크와의 IO를 기다리는 데 대부분의 시간을 소비합니다.

다른 팁

에서 Talkingtree, 그리고 자바 핫스팟 FAQ:

일반적으로, 더 많은 금액의 메모리를 해결할 수 있다는 이점은 64 비트 VM에서 성능 손실이 작은 32 비트 VM에서 동일한 응용 프로그램을 실행합니다. 이는 시스템의 모든 기본 포인터가 4 대신 8 바이트를 차지한다는 사실 때문입니다.이 추가 데이터의로드는 메모리 사용에 영향을 미치며 실행 중에 몇 개의 포인터가로드되는 수에 따라 약간 느린 실행으로 변환됩니다. 자바 프로그램.
좋은 소식은 AMD64 및 EM64T 플랫폼이 64 비트 모드로 실행되면보다 효율적인 기본 명령 시퀀스를 생성하는 데 사용할 수있는 몇 가지 추가 레지스터를 제공한다는 것입니다. 이 추가 레지스터는 32 ~ 64 비트 실행 속도를 비교할 때 종종 성능 손실이없는 시점까지 성능을 증가시킵니다.

SPARC의 32 비트 플랫폼에서 64 비트 플랫폼에서 실행되는 응용 프로그램을 비교하는 성능 차이는 64 비트 VM으로 이동할 때 10-20% 저하의 순서입니다.. AMD64 및 EM64T 플랫폼 에서이 차이는 응용 프로그램에 액세스하는 포인터의 양에 따라 0-15%입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top