Question

Je lisais récemment un article sur tous les arguments de la machine virtuelle Java disponibles dans JRE 6 [ machine virtuelle Java Options ] et a vu ceci:

  

-XX: + StringCache: active la mise en cache des chaînes généralement allouées.

Maintenant, j’ai toujours eu l’impression que Java conservait un pool de chaînes internes (mot correct?) et que, lorsqu’il effectuait une concaténation de chaînes avec des littéraux, il ne créait pas de nouveaux objets, mais les tirait de ce pool. Quelqu'un at-il déjà utilisé cet argument ou peut-il expliquer pourquoi il serait nécessaire?

EDIT: j'ai tenté d'exécuter un test de performance pour voir si cet argument avait un effet et si je ne pouvais pas le faire reconnaître par la machine virtuelle Sun. C'était avec:

java version "1.6.0_11"  
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode,
sharing)

Je ne suis donc pas sûr que cet argument fonctionne du tout.

Était-ce utile?

La solution 6

Je n'ai pas réussi à trouver une seule machine virtuelle qui accepte même cet argument supposé - je suppose donc qu'il n'y a pas grand chose à dire.

Autres conseils

Je pense que lorsqu'il est utilisé avec -XX:+AggressiveOpts, il permet de retourner les mêmes String objets lors de la création de new String avec le même texte (mais pas par <=>, bien sûr). Il y a une phase de profil où un cache est construit, et après un point, le cache est commuté en lecture seule. Il obtient des scores plus élevés dans certains points de repère.

-XX: -UseStringCache fonctionne pour moi, étrangement.

ma version de jdk devrait être 1.6.0_22

Moi aussi, je ne pouvais pas faire fonctionner ce qui précède, mais le dernier fichier JBB @ spec.org montre son utilisation: -XX: -UseStringCache. Je devrai réexécuter les tests de performance pour voir si cela fait une différence (une application lourde XML).

Je n'ai pas non plus été en mesure de trouver une machine virtuelle qui respecte ce paramètre; Comme l'a commenté la qualité et l'utilité de la documentation autour des paramètres de la machine virtuelle Java sont terribles, et pourtant, pour une raison quelconque, les fournisseurs de machines virtuelles voient un potentiel de différenciation concurrentielle - même si, pour être juste, Oracle / Sun est de loin le pire.

Quoi qu'il en soit, si vous trouvez que votre application dans un domaine particulier utilise un petit nombre de valeurs de chaîne à plusieurs reprises, il est judicieux d'utiliser interning - en utilisant la méthode String.intern () pour renvoyer une valeur intern-pool. Notez que vous devez utiliser la valeur de retour, ce n'est pas un effet secondaire sur la valeur d'origine.

Comme pour tous les ajustements de profilage / performances, cela doit être fait soigneusement avec des métriques et des tests. Cela peut être important (cela a été le cas pour moi), mais si le groupe de valeurs n’est pas petit, il dégrade les performances et vous devez savoir que le groupe de valeurs String est conservé dans la génération permanente et que son utilisation affectera donc l’utilisation de la mémoire. etc.

À partir de JDK 8.0, cette option a été supprimée. Il m'est difficile de savoir ce qui peut éventuellement être utilisé en remplacement.

http://docs.oracle.com/ javase / 8 / docs / technotes / tools / unix / java.html

 -XX:+UseStringCache

    Enables caching of commonly allocated strings. This option was removed from JDK 8 
    with no replacement.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top