2010-08-10 11 views
5

Kilka pytań :):Programowanie w języku Java dla 64-bitowego JVM

Jak rozpoznać, która JVM jest aktualnie zainstalowana? (64-bitowy/32-bitowy)

Czy muszę wziąć pod uwagę niektóre czynniki podczas programowania 64-bitowej platformy JVM?

Czy mój kod Java może działać na 32-bitowym i 64-bitowym JVM?

Jak uruchomić aplikację Java na 64-bitowym JVM?

Jak rozpoznać, która JVM jest używana w mojej aplikacji Java?

+1

Czy nie chodzi o maszynę * wirtualną *, w której architektura, w której jest wdrażana, nie ma znaczenia? – Ken

+2

Nie, jeśli potrzebujesz bibliotek SWT, aby móc działać. –

Odpowiedz

10

Zazwyczaj 64-bitowy jvm identyfikuje się jako taki.

32/64 bit Rozważania widziałem: przestrzeń

  1. adres - jeśli nie spodziewasz się zająć bardziej że 1.3Gb pamięci wtedy nie będzie widać różnicy
  2. natywnych bibliotek - jeśli ładujesz dowolne biblioteki JNI, będą musieli dopasować swoją architekturę VM. Na przykład nie próbuj ładować 32-bitowych natywnych bibliotek z 64-bitowego vm (bez znaczników -d32).

Tak, ten sam kod będzie działać na obu maszynach JVM.

Właściwość systemowa "sun.arch.data.model" ma flagę 32/64, jak sądzę.

Jest trochę pomocny informacji tutaj: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

+1

Należy pamiętać, że plik sun.arch.data.model jest niestandardowy, więc implementacje JVM inne niż słońce mogą nie zapewniać tej właściwości systemu. Właściwość systemowa os.arch to standardowa właściwość systemowa, ale być może trzeba ją przeanalizować. Sprawdzanie, czy os.arch zawiera znaki "64", może działać. –

+0

@jowierun "Zwykle jvm w wersji 64-bitowej identyfikuje się jako taki." Ale gdy uruchomię to samo na Solarisie (gdzie zainstalowane są zarówno 32-bitowe, jak i 64-VM), zawsze będzie to 32-bitowa maszyna wirtualna. – YoK

+1

@Sean Reilly, ale na 64-bitowej maszynie Sparc mogę uruchomić 32-bitową maszynę JVM. Więc nie sądzę, żeby os.arch pomógł. – YoK

4

W własnego kodu Java, nie musisz robić nic szczególnego w odniesieniu do 32- lub 64-bitowej. W przeciwieństwie do C i C++, int w Javie zawsze ma 32 bity, a long ma zawsze 64 bity (w C i C++ rozmiar tych typów zależy od systemu).

Nie ma oddzielnych 32-bitowych i 64-bitowych wersji kodu bajtowego Java; kod bajtowy jest dokładnie taki sam, niezależnie od tego, czy JVM, na którym go uruchomiono, jest 32-bitowy lub 64-bitowy. Nie musisz kompilować źródła Java inaczej dla wersji 32-bitowej lub 64-bitowej. Jeśli chodzi o funkcjonalność, nie ma to znaczenia dla twojej aplikacji Java, jeśli działa na 32-bitowej lub 64-bitowej maszynie JVM.

Może być kilka technicznych różnic, o których już wspomniałem. Mogą również występować różnice w wydajności; na przykład 64-bitowa JVM Oracle dla Windows jest dostrojona inaczej niż 32-bitowa maszyna JVM, robi też inne optymalizacje JIT. Zauważyłem to sam z aplikacją intensywnie obliczającą, którą napisałem niedawno; na 64-bitowej maszynie JVM działa znacznie szybciej niż na 32-bitowej maszynie JVM. (Ale to tylko jeden przykład, nie bierz tego na dowód, że jakikolwiek program działa znacznie szybciej na 64-bitowej maszynie JVM).

+1

Jedną z przyczyn, dla których 64-bitowa maszyna wirtualna x86 JVM (i wiele innych programów 64-bitowych) działa szybciej, jest więcej rejestrów do pracy z http://www.oracle.com/technetwork/java/hotspotfaq-138619.html# 64bit_performance –

1

Masz te pytania na pierwszym planie.

  1. Nie musisz nic robić w swoim kodzie Java, będzie działać zarówno na 32-bitowych, jak i 64-bitowych.
  2. Dlatego nie trzeba wiedzieć, czy jest to 64-bitowa maszyna JVM, czy nie.
+6

@downvoter: proszę wyjaśnić. Niewyjaśnione downvotes nikomu nie pomagają: nie pokazują opinii publicznej, co jest nie tak z odpowiedzią i nie pomagają też w plakacie. – EJP

+0

Myślę, że to dlatego, że odpowiedziałeś tylko na 20% pytania. Poza tym część po ** dlatego ** jest założeniem z twojej strony – Pacerier

+0

@Pacerier Spodziewałbym się spadku, gdyby coś było * niepoprawne * nie tylko dla niekompletnej odpowiedzi. Wydaje mi się to dziwne. – EJP

2

Jeśli planujesz napisać natywny kod przy użyciu Java Native Interface (JNI), musisz być bardzo ostrożny przy pisaniu odpowiedniego kodu C, który będzie działał na maszynach 64- i 32-bitowych. Upewnij się, że używasz odpowiednich typów Java podczas przekazywania argumentów do/z kodu java (JNI zapewnia zestaw typedef dla typów Java), szczególnie podczas konwersji tablic. A podczas testowania natywnego kodu przetestuj obie architektury (-m32 wymusi 32-bitowy łuk na GNU gcc) z różnymi JVM.