quelle performance est meilleure?quelle est la performance de code byte java getfield vs invokevirtual
J'ai posé cette question sans test parce que je suis paresseux. Maintenant, après le test, il montre getMethod est légèrement plus rapide que .field
Integer xj = x.getJ();`
ou
Integer yj = x.j;
Voici byte code java après que je ne décompiler
L5 {
aload1
invokevirtual testj/ByteCodeTest getJ(()Ljava/lang/Integer;);
astore4
}
L6 {
aload1
getfield testj/ByteCodeTest.j:java.lang.Integer
astore5
}
Voici le code que je teste:
public void setPoint(){
point=System.currentTimeMillis();
System.out.println("point"+point);
}
public void comparePoint(){
long endPoint=System.currentTimeMillis();
System.out.println("endPoint"+endPoint);
System.out.println("inteval"+(endPoint-point));
}
int count =2000000000;
public void test22(){
ByteCodeTest x = new ByteCodeTest();
setPoint();
for(int i=0;i<count;i++){
int yy= x.i+1;
}
comparePoint();
setPoint();
for(int i=0;i<count;i++){
int yy=x.getI()+1;
}
comparePoint();
}
est ici la sortie de code:
point1490454906205
endPoint1490454907447
inteval1242
point1490454907448
endPoint1490454908666
inteval1218
Cela signifie getMethod est légèrement plus rapide que .field
Pourquoi? Avez-vous l'intention de choisir l'un plutôt que l'autre pour des raisons de performance? – Kayaman
Si les différences de performance à ce niveau vous importent, vous devriez probablement utiliser un langage de programmation de niveau inférieur plutôt que Java. – ControlAltDel