在Sun的HotSpot VM里,client VM与server VM是共用一套解释器的,“照理说”无论是在client还是server模式,纯解释执行的性能应该是一样的。但实际上,解释器虽然是同一个,但它却可以根据启动参数的不同而变得不同。HotSpot VM的解释器是在启动的时候才动态生成的,其中好处之一就是它会根据启动参数来生成最小量必要的代码(理论上…)。这样生成出来的解释器就可以在当时的环境中最合适。
在client模式中,VM参数ProfileInterpreter默认是false,而在server模式中这个参数默认为true。
client模式默认是用UseSerialGC,是单线程串行执行的;而server模式默认是用UseParallelGC,是多线程并行执行的,所以server模式的会快一些(按单位回收的空间大小来算,不要按单次停机时间来算因为堆大小可能不同)。另外堆大小的默认选择也不同,server模式默认会用更大的GC堆,所以GC次数会比较少。 |