Java GC tuning pour les chaînes


Profilant l'application, j'ai compris qu'il y avait beaucoup de chaînes sur le tas.

Dans ma situation, les chaînes sont créées sur le tas et non internées et ce ne sont pas des littéraux.

Existe-t-il des techniques d'accord GC spécifiques à suivre lorsque le nombre de chaînes dans l'application est très élevé.

Je suis tombé sur les paramètres GC -XX:+UseCompressedStrings ou-XX+UseStringCache mais je ne suis pas sûr que cela aidera. N'importe quel corps a essayé ces les paramètres?

Version Java "1.6.0_22"
L'environnement d'exécution Java(TM) SE (build 1.6.0_22-b04)
Java HotSpot (TM) serveur virtuel 64 bits (build 17.1-b03, mode mixte)

Author: Srujan Kumar Gulla, 2013-04-09

2 answers

Lié à -XX:+UseCompressedStrings, vous devriez jeter un oeil à cette question: Prise en charge des chaînes compressées en cours de suppression dans HotSpot JVM?

Et, lié à -XX+UseStringCache, jetez un oeil à : JVM-XX:+Argument StringCache?

Btw. Java 7 est livré avec de belles fonctionnalités qui permettent de régler le cache de chaînes lors de l'utilisation des chaînes internées. Voir -XX:+PrintSTringTableStatistics et -XX:StringTableSize=n. De cette façon, vous pouvez optimiser la taille du cache de chaîne.

 8
Author: Aleš, 2017-05-23 12:12:35

Java 8 est livré avec une nouvelle fonctionnalité GC-XX:+UseStringDeduplication.

Après avoir activé cela, GC comparerait les chaînes pour trouver celles avec la même valeur de tableau de caractères. Disons str1 & str2 avoir le même char [], alors GC ferait point str1 à char [] de str2. De cette façon, char [] de str1 peut être récupéré et récupérer la mémoire. Et puisque les chaînes sont immuables, il n'y a aucun risque de faire pointer plusieurs chaînes vers le même char []

 0
Author: Nishit, 2020-07-10 16:54:42