2008-10-14 6 views
13

Jestem absolutną n00b na platformie Java Chciałbym wiedzieć, czy muszę coś zmienić w moim kodzie, aby uzyskać korzyści z 64-bitowego środowiska JRE?Korzyści z 64-bitowej platformy Java

czy jest to coś takiego, kiedy inicjuję to przy pomocy "java -d64", które będzie działać w trybie turbo?

Twoja pomoc jest bardzo cenna.

Odpowiedz

3

Powinieneś nic nie zmieniać. W przeciwieństwie do C lub C++, Java ma specyfikację napisaną dla niego, która zapewnia, że ​​int (i inne typy danych) są zawsze tej samej długości, niezależnie od platformy, na której się znajdujesz.

1

Tak, nie trzeba niczego zmieniać. To JRE jest inne, a nie kod, który piszesz.

5

Ponieważ maszyna JVM, w której wykonywany jest kod, powinna zachowywać się tak samo (liczby całkowite są zawsze podpisane 32-bitowo itd.), Twój kod jest gwarantowany (teoretycznie) do działania identycznie, bez względu na to, na jakiej platformie go uruchomisz.

Różnica 32/64 bitów dotyczy sposobu, w jaki maszyna JVM może zoptymalizować środowisko wykonawcze. Tak więc, podczas gdy wykonywany kod bajtowy pozostaje taki sam, może być (lub nie) zoptymalizowany w inny sposób.

W skrócie, 64-bitowy system z uruchomioną Javą może wykonać kod szybciej niż 32-bitowy odpowiednik systemu.

7

Nie musisz niczego zmieniać. Nie ma żadnej nieodłącznej korzyści przy użyciu 64-bitowego. W rzeczywistości zwiększy to twój program w pamięci, ponieważ wszystkie wskaźniki będą miały szerokość 64 bitów zamiast 32 bitów.

Jedyną korzyścią jest to, że wykonujesz 64-bitowe obliczenia, np. Używając wielu "długich" w kodzie lub jeśli Twoja aplikacja wymaga pamięci większej niż 4GB.

+0

Czy korzystanie z większej ilości pamięci niż około 1,5 GB nie jest jedną z korzyści, przynajmniej w systemie Windows? Jest taki limit dla 32-bitowego procesu Java. http://mystyleit.com/blogs/mystyleit/archive/2009/05/27/32bit-windows-memory-and-java.aspx – Jonik

+1

Czy najnowsze 64-bitowe maszyny JVM nie są jednak mądrzejsze w przydzielaniu referencji? To znaczy, używając tylko 32-bitowych odniesień, jeśli nie potrzebuje pełnego 64-bitowego. Myślę, że gdzieś to przeczytałem. –

13

Moja poprzednia wersja, chociaż nie była fałszywa, była szybko napisanym uproszczeniem.

Zmiana z 32 na 64 bity nie spowoduje automatycznego przyspieszenia działania aplikacji, może to w niektórych przypadkach doprowadzić do odwrotności. Po stronie "ujemnej" Odsadzanie wskaźników pamięci w JVM może trwać dłużej ze wskaźnikami 64-bitowymi niż 32-bitowymi. Pełne zbieranie śmieci i zagęszczanie sterty o wielkości 16 GB prawdopodobnie zajmie więcej czasu niż w przypadku sterty 2 GB.

Po stronie pozytywów: Są tam 64-bitowe instrukcje procesora, które są bardziej skuteczne niż te 32-bitowe. 64-bitowa maszyna JVM pozwoli ci mieć rozmiar sterty 2^32 razy większy niż ten, nieco mniejszy niż 4 GB, który możesz uzyskać za pomocą 32-bitowego. (Jeśli możesz pozwolić sobie na zakup takiej ilości pamięci RAM) Niektóre maszyny JVM mogą pracować ze skompresowanymi referencjami, jeśli masz rozmiar sterty mniejszy niż 4 GB, co daje ci przewagę 64-bitowych instrukcji bez konieczności płacenia 64-bitowej ceny porównawczej .

Jeśli masz dobrą maszynę JVM, udałbym się na 64 bity, bez względu na wielkość sterty, po prostu przygotuj się, że być może będziesz musiał wykonać uderzenie wydajności, aby mieć naprawdę dużą stertę.

8

Nie sądzę, że 64-bitowa maszyna JVM uzyska wydajność aplikacji? W jaki sposób?

W rzeczywistości 64-bitowe procesory są nieco wolniejsze. Mają bardziej skomplikowany proces dekodowania (backward support 32 bit operations). Potrzebują więcej pamięci (wszystkie wskaźniki mają podwójny rozmiar, prawda?). Jedyne, co masz na procesorze 64-bitowym, to dużo pamięci RAM.Jak wiemy, rozmiar jest prędkością. Wiele pamięci RAM może bardzo dobrze sprawić, że niektóre aplikacje są wydajne (jeśli aplikacja mogłaby z nich korzystać). Tak 64-bitowy - nie. Dużo RAM - zdecydowanie tak.

Jest jeszcze jedna rzecz, którą 64-bitowe procesory mogłyby wykonać szybciej. Atomowy zapis/odczyt liczb 64-bitowych. Jeśli pracujesz z numerami 64-bitowymi (długie w java), 64-bitowe procesory będą lepsze, ponieważ mają instrukcje maszynowe do pracy z tego rodzaju liczbami.

+2

zestaw instrukcji AMD64 udostępnia więcej rejestrów programom, prowadząc w ten sposób do potencjalnego zwiększenia szybkości realizacji. – Sebastian

2

Czy masz kod JNI w swoim kodzie aplikacji? W takim razie może powinieneś się martwić o 32- i 64-bitowe natywne pliki binarne.

32 lub 64 jest taki sam jak kod Java. Aspekty wydajności już wydają się dobrze pokryte przez poprzednie plakaty.

0

Odkryłem, że 64-bitowe maszyny JVM były wolniejsze niż wersje 32-bitowe. Jednak w najnowszej wersji aktualizacji Java 6 14 widziałem, jak wiele moich testów jest marginalnie szybszych w wersji 64-bitowej w stosunku do wersji 32-bitowej. Tak czy inaczej jest tylko 5% do 10% różnicy.

To, czy program korzysta z wersji 32-bitowej czy 64-bitowej, zależy od wyboru używanej maszyny JVM. Jak już wspomniano, musisz sprawdzić, czy masz odpowiednie biblioteki współdzielone. (lub idealnie żadnego)

Główną różnicą jest możliwość użycia większej ilości pamięci, szczególnie jeśli potrzebujesz 4 GB lub więcej.

0

Spróbuj tego:

public class Benchmark { 
public static void main(String args[]) { 
long time = System.currentTimeMillis(); 
for (int a = 1; a < 900000000; a++) { 
    for (int b = 1; b < 20; b++) { 
    } 
} 
long time2 = System.currentTimeMillis() - time; 
System.out.println("\nTime counter stopped: " + time2); 

}

W 32 i 64 bit i śmiać się z różnicy.

+5

Opis różnicy może okazać się przydatny w tym przypadku. –