When testing nonpermgen performance, we noticed the score (throughput) changes when applying the command line with different length, even though the added flags is the same as the default value.
This only happens on Linux (not Solaris), we are using OEL6.0 on Intel Sandy-Bridge. The workload is SPECjbb2005.
The command line length affects the performance differently on different builds. We tested nonpermgen build, the reference build for nonpermgen (ref build with permgen) and jdk7u6.
cmd1: -server -Xms4g -Xmx4g -XX:+UseParallelGC -XX:-UseAdaptiveSizePolicy -XX:-UseLargePages -XX:-TieredCompilation -XX:-UseCompressedOops
cmd2: -server -Xms4g -Xmx4g -XX:+UseParallelGC -XX:-UseAdaptiveSizePolicy -XX:-UseLargePages -XX:-TieredCompilation -XX:-UseCompressedOops -XX:-UseSharedSpaces
cmd3: -server -Xms4g -Xmx4g -XX:+UseParallelGC -XX:-UseAdaptiveSizePolicy -XX:-UseLargePages -XX:-TieredCompilation -XX:-UseCompressedOops -Xmixed1234567801234
cmd2 set the value for -XX:-UseSharedSpaces the same as default.
cmd3 does not set the value for -XX:-UseSharedSpaces but just changed the command line length.
runid jvm version cmd score changes
527 nonpermgen cmd1 338,718
528 nonpermgen cmd2 322,747 -4.71%
526 nonpermgen cmd3 320,297 -5.44%
532 ref cmd1 322,959
533 ref cmd2 340,853 5.54%
531 ref cmd3 339,767 5.20%
587 7u6 cmd1 338,920
588 7u6 cmd2 321,424 -5.16%
Other observations:
When the throughput drops, the gc behavior changes as well.
For example, run 527, has 1417 PSYoungGen, average gc time is 0.035, run 528 has 1334 PSYoungGen, average gc time is 0.053.
GC logs are available on request.