2011-02-08 6 views
9

최근에 Windows Server 2008 Enterprise의 64 비트 OS로 이동했습니다.Java 성능 64 비트

내 자바 프로그램이 정말

윈도우 2003에서 크게 피드백을보다 느린 32 비트를겠습니까 실행하는 것 같다.

이 것이 알려진 문제입니까? 성능 향상을위한 특정 설정이 있습니까?

(64 비트로 옮길 경우 약간의 성능 저하가있을 수 있지만 중요한 성능 저하가 있음을 알고 있습니다).

답변

7

64 비트 JVM에서는 다른 성능을 볼 수 있지만 다른 컴퓨터에서 다른 OS를 사용하면 훨씬 다른 차이가 나타납니다.

64 비트 참조를 사용하여 속도가 느려지는지 확인하려는 경우 -XX:+UseCompressedOops을 사용하면 64 비트 JVM이 32 비트 참조를 사용하지만 여전히 32GB 메모리에 액세스 할 수 있습니다.

이 방법을 테스트하는 또 다른 방법은 시스템에서 32 비트 JVM을 사용하는 것입니다. ;)

우리는 대기 시간에 민감한 시스템을 가지고 있으며 64 비트 JVM에서 32 비트 참조를 사용할 때 성능상의 이점이 거의 없습니다. 모든 주소가 3 비트 씩 이동하기 때문입니다. 더 작은 레지스터 세트 인 32 비트 JVM은 도움이되는 것보다 더 많이 우리를 아프게합니다.

편집 : 자세한 내용

를 들어

http://wikis.sun.com/display/HotSpotInternals/CompressedOops

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

http://blog.juma.me.uk/2008/10/14/32-bit-or-64-bit-jvm-how-about-a-hybrid/

+0

64 비트 JVM은 32 비트 참조를 사용하지만 32GB 메모리에 계속 액세스 할 수 있습니까? – Pacerier

+0

각 오브젝트가 8 바이트 경계 (8 바이트 정렬)에서 시작한다는 것을 알고 32 비트 인덱스를 사용합니다. 따라서 최대 2^32 * 8 바이트 또는 32GB까지 주소 지정할 수 있습니다. –

+0

ic, 도움 주셔서 감사합니다 =) – Pacerier

3

예, 그렇습니다. Hotspot FAQ을 살펴보십시오.

8 바이트 포인터는 코드와 데이터 크기를 증가시키고 모든 작업을 느리게 만듭니다. 성능을 찾고 있고 큰 힙이 필요하지 않은 경우 32 비트 Java VM을 사용해보십시오.

+0

+1 : 저는 64 비트 JVM을 사용하여 항상을 사용하고 의미 있다는 흥미로운 몰랐다 서버 VM. – Powerlord

+0

예. 저는 이것을 알고 있습니다. 그러나 저는 작은 손실에 대해서가 아니라 상당히 느린 것을 말하고 있습니다. – Dan

+0

이전에 Sun은 Solairs/Linux JVM을 기본적으로'-server'를 사용하고 Windows는 기본적으로'-client'를 사용했습니다. 64 비트의 경우, 모든 릴리스는 기본적으로'-server'를 사용합니다. –