Co robi flaga HotSpot JVM -XX:+UseCompressedOops
i kiedy należy jej używać? Jakie różnice w wydajności i wykorzystaniu pamięci zobaczę podczas korzystania z niej w 64-bitowej instancji Java (w porównaniu z jej nieużywaniem)?
Co robi flaga HotSpot JVM -XX:+UseCompressedOops
i kiedy należy jej używać? Jakie różnice w wydajności i wykorzystaniu pamięci zobaczę podczas korzystania z niej w 64-bitowej instancji Java (w porównaniu z jej nieużywaniem)?
Odpowiedzi:
Większość JVM HotSpot w zeszłym roku miała ją domyślnie włączoną. Ta opcja umożliwia 32-bitowe odwołania w 64-bitowej maszynie JVM i dostęp do sterty blisko 32 GB. (więcej niż 32-bitowe wskaźniki) (Możesz również mieć prawie nieograniczoną pamięć poza stertą). Może to zaoszczędzić znaczną ilość pamięci i potencjalnie poprawić wydajność.
Jeśli chcesz skorzystać z tej opcji, sugeruję aktualizację do wersji, która ma ją domyślnie włączoną, ponieważ mógł istnieć dobry powód, taki jak błędy, dlaczego wcześniej nie była włączona. Wypróbuj aktualizację Java 6 Update 23 lub Java 7 Update 5.
Krótko mówiąc, nie włączaj go, użyj wersji, która ma to domyślnie.
Aktualizacja:
W Javie 8 masz opcję ustawienia -XX:ObjectAlignmentInBytes=
i faktycznie, jeśli rozmiar sterty wynosi 64 GB, będzie on używał -XX:ObjectAlignmentInBytes=16
i nadal będzie używał odwołań 32-bitowych.
JE cache
Dzieje się tak, ponieważ z jakiegoś powodu nie można stwierdzić, czy używasz kompresji oops, czy nie. Przy okazji przychodzi mi do głowy kilka metod, które mogą ci to powiedzieć. Nie powinno być potrzeby określania tego w wierszu poleceń IMHO, chyba że chcesz, aby maszyna JVM uległa awarii, jeśli nie jest włączona. np. masz stertę 64 GB na Javie 8.