2011-02-08 8 views
9

Niedawno przeprowadziłem się do 64-bitowego systemu operacyjnego w systemie Windows Server 2008 Enterprise.Wydajność Java 64 bitowa

Wydaje się, że moje programy Java są znacznie działa wolniej niż 32 bit Windows 2003

Czy naprawdę wszelkie komentarze.

Czy to znany problem? Czy istnieją określone ustawienia poprawiające wydajność?

(Jestem świadomy, że za przejście do wersji 64-bitowej jest mała kara za wydajność, ale widzę znaczący spadek wydajności).

Odpowiedz

7

Przy 64-bitowej maszynie JVM wydajność może być różna, ale różnica w działaniu będzie różna, jeśli użyjesz innego systemu operacyjnego na innym komputerze.

Jeśli chcesz sprawdzić, czy spowolnienie używania 64-bitowych odwołań, możesz włączyć -XX:+UseCompressedOops, co powoduje, że 64-bitowa maszyna JVM używa 32-bitowych odwołań, ale nadal może uzyskać dostęp do 32 GB pamięci.

Innym sposobem sprawdzenia tego jest użycie 32-bitowej maszyny JVM w systemie. ;)

Mamy system wrażliwy na opóźnienia i widzimy małą przewagę wydajności przy korzystaniu z 32-bitowych odniesień na 64-bitowej maszynie JVM, ponieważ przesuwa ona każdy adres o 3 bity. 32-bitowy zestaw rejestrów JVM mniej nas boli, niż pomaga.

EDIT: Aby uzyskać więcej informacji

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

W jaki sposób 64-bitowa maszyna JVM korzysta z 32-bitowych odwołań, ale nadal może uzyskać dostęp do 32 GB pamięci? – Pacerier

+0

Używa indeksu 32-bitowego, wiedząc, że każdy obiekt rozpocznie się na granicy 8 bajtów (8 bajtów wyrównania). Może więc adresować do 2^32 * 8 bajtów lub 32 GB. –

+0

ic, dzięki za pomoc =) – Pacerier

3

Tak, patrz na Hotspot FAQ.

8 wskaźników bajtów zwiększa rozmiar kodu i danych oraz spowalnia wszystko. Jeśli szukasz wydajności i nie potrzebujesz dużej sterty, spróbuj 32-bitowej maszyny wirtualnej Java.

+0

+1: Ciekawe, nie wiedziałem, że za pomocą 64-bitowej JVM oznaczało, że można było zawsze za pomocą VM serwera. – Powerlord

+0

Tak, wiem o tym - ale nie mówię o niewielkiej stracie, ale o znacznym spowolnieniu. – Dan

+0

Poprzednio Sun uczynił maszynę Javy SOLairs/Linux domyślnie używając '-serwer', a Windows domyślnie używał' -client'. (Być może nastawienie co do tego, do czego sądzi, że są one dobre;) W wersji 64-bitowej wszystkie ich wydania korzystają domyślnie z '-serwera'. –