O que o sinalizador HotSpot JVM -XX:+UseCompressedOops
faz e quando devo usá-lo? Que tipo de diferenças de desempenho e uso de memória verei ao usá-lo em uma instância Java de 64 bits (em comparação com não usá-lo)?
O que o sinalizador HotSpot JVM -XX:+UseCompressedOops
faz e quando devo usá-lo? Que tipo de diferenças de desempenho e uso de memória verei ao usá-lo em uma instância Java de 64 bits (em comparação com não usá-lo)?
Respostas:
A maioria do HotSpot JVM no ano passado o tinha ativado por padrão. Esta opção permite que as referências sejam de 32 bits em uma JVM de 64 bits e acessem perto de 32 GB de heap. (mais de ponteiros de 32 bits podem) (você também pode ter memória off heap quase ilimitada). Isso pode economizar uma quantidade significativa de memória e melhorar potencialmente o desempenho.
Se você quiser usar esta opção, sugiro que você atualize para uma versão que a tenha ativado por padrão, pois pode haver um bom motivo, como bugs, por que não foi ativado anteriormente. Experimente a atualização 23 do Java 6 ou atualização 5 do Java 7.
Resumindo, não ligue, use uma versão que o tenha ativado por padrão.
Atualizar:
No Java 8, você tem a opção de definir o -XX:ObjectAlignmentInBytes=
e, de fato, se o tamanho do heap for 64 GB, ele usará -XX:ObjectAlignmentInBytes=16
e ainda usará referências de 32 bits.
JE cache
Isso porque não pode descobrir se você está usando compressas opa ou não por algum motivo. Posso pensar em alguns métodos que podem te dizer isso btw. Você não deve precisar especificá-lo na linha de comando IMHO, a menos que queira que o JVM falhe se não estiver habilitado. por exemplo, você tem um heap de 64 GB em Java 8.