2 つの主要な段階がある長いプロセスがあります。第 1 段階と第 2 段階では、実行パスが若干異なります。
-server
JMH ( , on )によると、同じメソッドのコピーを別の名前で作成し、各段階で別の名前を使用するとjava-7-openjdk-amd64
、第 2 段階でメソッド呼び出しが 25% 以上高速化されることに気付きました (メソッドへの数百万回の呼び出し (5 回の呼び出しのウォームアップ後に 5 回の呼び出しで測定)。
メソッドに関する以前の最適化を忘れて、ゼロから再学習するように JVM に指示する方法はありますか?
次のコード例では、ベンチマーク メソッドはであり、とrun
を呼び出す 2 つのバージョン間で比較が行われます。checkChar
checkChar0
stage2
final public void run(){
sumStg1=0;
for(int i=0; i< 10000; i++){
String str = consumeString();
for(int i= 0; i<K; i++){
sumStg1 += checkChar(str.charAt(i), i)?1:0;
}
}
sumStg2=0;
for(int j=0; j< 10000000; j++){
String str = consumeString();
for(int i=K/2; i<str.length(); i++){
sumStg2 += checkChar(str.charAt(i), i)?1:0;
}
}
}
final public boolean checkChar(char in, int i){
if(i < K/2){
...
} else if (i < K){
...
} else {
...
}
}
//identical method to checkChar
final public boolean checkChar0(char in, int i){
if(i < K/2){
...
} else if (i < K){
...
} else {
...
}
}