2009-02-26 5 views

답변

12

작업 부하를 정의하고 "수행하는"것이 무엇을 의미하는지 정의하십시오.

이것은 장기간 성능 괴짜로서 내게 달려가는 일종의 성가심입니다. 특정 변경이 "더 잘 수행되는지 여부"가 작업 부하에 무엇보다 중요합니다. 즉, 프로그램에 수행 할 작업을 묻는 것입니다.

64 비트 계산 부하가 많은 작업에서는 Java가 자주 성능이 향상됩니다. Java 프로그램은 고전적으로 I/O 부하가 높고 네트워크 부하가 큽니다. 64 비트 대 32 비트는 중요하지 않지만 운영 체제는 일반적으로 문제가 없습니다.

+5

답변이 간단하지 않을 수 있습니다. 필자에게 64 비트는 64 비트 주소 공간이 도움이되고 방해가되지 않는로드에 더 적합합니다. 모든 포인터에 대해 2 배의 비용이 들며, 많은 양의 데이터가 필요할 때보다 중요합니다. 웹 서버 객체 캐시는 64 비트가 성공한 좋은 예입니다. – Cheeso

+4

Sun은이 대답이 잘못되었다고 말합니다. – Darron

+1

대런, 그걸 인용 했나요? Sun에서 10 년 동안 일한 이래로 대답은 기본적으로 "작업 부하와 어떤 측정 성능에 달려 있느냐에 달렸습니다."- 나는 이것을 어떻게 쓰는지 - 당신을 믿지 않습니다. –

-2

예, 특히 코드가 64 비트 플랫폼을 대상으로 작성된 경우

+1

64 비트 플랫폼 용 Java 코드를 정확히 대상으로하는 방법은 무엇입니까? – TofuBeer

+0

32 비트 대신 64 비트 정수를 사용합니다. –

2

대부분의 CPU 아키텍처에서 32 비트는 64 비트보다 빠르며 그 밖의 모든 것은 동일합니다. 64 비트 포인터는 32 비트로 전송하는 데 2 ​​배의 대역폭이 필요합니다. 그러나 x64 명령어 세트 아키텍처는 x86에 비해 약간의 정상 성을 더해 주므로 더 빨리 끝납니다. long 타입의 처리량은 대개 작습니다.

물론 자바의 구현에 따라 달라집니다. 컴파일러뿐만 아니라 구현의 차이점을 발견 할 수도 있습니다. 예를 들어, NIO는 64 비트 포인터를 가정합니다. 또한 Sun은 이전에 x64에 대해보다 빠른 서버 HotSpot 구현만을 출하했습니다. 즉, -d64을 지정하면 클라이언트에서 서버 HotSpot IIRC로 전환됩니다.

2

몇 가지 개선 사항 : 64 비트에서의 복식 연산은 32 비트 부동 소수점 연산과 int 연산보다 64 비트 연산이 동등하게 빠릅니다.

그래서 많은 양의 코드를 실행하는 경우 실제 개선이 이루어질 수 있습니다.

18

거의 항상 64 비트가 느려집니다.

HotSpot FAQ에서 일을 인용하자면 : 응용 프로그램이 SPARC에서 32 비트 플랫폼에 비해 64 비트 플랫폼에서 실행 비교 성능 차이는 10 ~ 20 % 정도에

입니다

VM으로 이동하면 이 저하됩니다. AMD64 및 EM64T 플랫폼의 경우이 차이는 에 따라 0-15 % 차이가 나며 응용 프로그램에 액세스하는 포인터는 입니다.

링크에 자세한 내용이 있습니다.

+0

위의 문단 –

3

1.2GB가 넘는 경우 64 비트가 더 잘 수행됩니다. 일부 플랫폼에서는 최대 3GB까지 얻을 수 있지만, 예를 들어 4 - 384GB를 원하면 64 비트 만 선택할 수 있습니다.

저는 Azul이 384GB JVM을 지원한다고 생각합니다.

+0

1.2GB 또는 무엇에 표시된 바와 같이 x86_64에서 거의 항상 빠릅니다. 기억? – johnny

+0

@johnny 예, 32 비트 Windows 시스템에서 1.2GB의 메모리. –

0

내 경험은 다른 답변과 다릅니다.

Java 64 비트는 32 비트보다 빠릅니다. 적어도 내 테스트와 항상 같았 어!64 비트 -VM은 내부적으로 짧은 포인터를 사용하기 때문에 4GB 미만이 사용되면 포인터 인수가 유효하지 않습니다. 그러나 64 비트 CPU의 더 빠른 명령어 세트를 얻을 수 있습니다!

Windows 7 및 JDE1.8.0_144에서 테스트했지만 실제 이유는 내부 JVM 설정이 다릅니다. 64 비트 JVM을 사용하면 "서버"모드에서 시작하고 32 비트 VM은 "클라이언트"모드에서 시작됩니다.