web-dev-qa-db-fra.com

À quoi sert l'indicateur JVM UseCompressedOops et quand dois-je l'utiliser?

Qu'est-ce que l'indicateur JVM HotSpot -XX:+UseCompressedOops faire et quand dois-je l'utiliser? Quels types de différences de performances et d'utilisation de la mémoire vais-je voir lorsque je l'utilise sur une instance 64 bits Java instance (vs ne pas l'utiliser)?

77
noahlz

La plupart des JVM HotSpot de l'année dernière l'ont activée par défaut. Cette option permet aux références d'être 32 bits dans une machine virtuelle Java 64 bits et d'accéder à près de 32 Go de segment de mémoire. (plus de pointeurs 32 bits peuvent) (Vous pouvez également avoir une mémoire hors tas presque illimitée). Cela peut économiser une quantité importante de mémoire et potentiellement améliorer les performances.

Si vous souhaitez utiliser cette option, je vous suggère de mettre à jour vers une version qui l'a activée par défaut car il peut y avoir une bonne raison, comme des bugs, pour laquelle elle n'a pas été activée précédemment. Essayez Java 6 mise à jour 23 ou Java 7 mise à jour 5.

En bref, ne l'allumez pas, utilisez une version qui l'a activée par défaut.


Mise à jour:

Dans Java 8, vous avez la possibilité de définir le -XX:ObjectAlignmentInBytes= et en fait, si vous avez une taille de tas de 64 Go, il utilisera -XX:ObjectAlignmentInBytes=16 et utilise toujours des références 32 bits.

81
Peter Lawrey