Je teste une application JVM qui impose une charge très lourde à la fois sur les E / S de disque et sur le processeur.
Normalement, je le teste en utilisant la taille de tas 4G max / min, la combinaison complète prend en moyenne 73 secondes à courir.
Aujourd'hui, j'étais curieux et je ne lui avais donné qu'une taille de tas de 1 G max / min, et étonnamment, la combinaison complète ne prend que 62 secondes en moyenne.
Je me demande donc pourquoi la machine virtuelle Java fonctionne mieux avec une taille de segment de mémoire plus petite.
Notes supplémentaires:
- Les résultats de référence ci-dessus sont reproductibles de manière fiable sur cette machine.
- Code source de référence https://github.com/HouzuoGuo/Aurinko2/blob/master/src/test/scala/net/houzuo/aurinko2/test/logic/Benchmark.scala
Environnement:
java version "1.7.0_19"
OpenJDK Runtime Environment (fedora-2.3.9.1.fc17-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
Linux ____ 3.8.4-102.fc17.x86_64 #1 SMP Sun Mar 24 13:09:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Réponses:
3 pour la réponse № 1D'après la documentation sur la machine virtuelle Java Oracle, la note indique
Ensuite, vous pouvez essayer de réduire la quantité de tas utilisée. Un plus grand tas entraînera une augmentation des pauses dans la collecte des ordures, car il y a plus tas à numériser.
C'est également fonction de l'algorithme GC que vous utilisez. Par exemple, le GC incrémental peut donner des nombres complètement différents. (Essayer -Xincgc
et voir vos chiffres)