Cosa fa il flag HotSpot JVM -XX:+UseCompressedOops
e quando dovrei usarlo? Che tipo di differenze di prestazioni e utilizzo della memoria vedrò quando lo utilizzerò su un'istanza Java a 64 bit (rispetto al non utilizzo)?
Cosa fa il flag HotSpot JVM -XX:+UseCompressedOops
e quando dovrei usarlo? Che tipo di differenze di prestazioni e utilizzo della memoria vedrò quando lo utilizzerò su un'istanza Java a 64 bit (rispetto al non utilizzo)?
Risposte:
La maggior parte di HotSpot JVM nell'ultimo anno lo ha attivato per impostazione predefinita. Questa opzione consente ai riferimenti di essere a 32 bit in una JVM a 64 bit e di accedere a quasi 32 GB di heap. (più di puntatori a 32 bit possono) (Puoi anche avere una memoria heap quasi illimitata). Ciò può far risparmiare una notevole quantità di memoria e potenzialmente migliorare le prestazioni.
Se vuoi utilizzare questa opzione ti suggerisco di aggiornare a una versione che lo ha per impostazione predefinita in quanto potrebbe esserci stata una buona ragione, come i bug, perché non era abilitato in precedenza. Prova l'aggiornamento 23 di Java 6 o l'aggiornamento 5 di Java 7.
In breve, non accenderlo, usa una versione che lo ha per impostazione predefinita.
Aggiornare:
In Java 8 hai la possibilità di impostare il -XX:ObjectAlignmentInBytes=
e infatti se la dimensione dell'heap su 64 GB utilizzerà -XX:ObjectAlignmentInBytes=16
e utilizzerà ancora riferimenti a 32 bit.
JE cache
Questo perché non può capire se stai usando compresses oops o no per qualche motivo. Posso pensare ad alcuni metodi che possono dirti questo btw. Non dovrebbe essere necessario specificarlo sulla riga di comando IMHO a meno che non si desideri che la JVM fallisca se non è abilitata. es. hai un heap da 64 GB su Java 8.