Eines vorweg: Ich weiß, meine Art der "Performancemessung" ist ungenau und wird einigen hier nciht gefallen. Aber davon abgesehen:
Ich habe folgende Testklasse geschrieben:
Es zeigt sich, dass der nicht-statische Methoden-zugriff mithilfe einer statischen Klasseninstanz im Schnitt etwa 15% bis 20% schneller ist, als der direkte Aufruf der statischen Methode. Warum ist das so?
Ich habe folgende Testklasse geschrieben:
Code:
public class Test
{
public static Test instance = new Test();
public static void blubberS()
{
// any algorithm
int i=0;
++i;
--i;
}
public void blubber()
{
// any algorithm
int i=0;
++i;
--i;
}
public static void main(String[] args) throws Exception
{
long startTime=System.currentTimeMillis();
for (long i=0; i < 1000000000l; i++)
{
Test.blubberS();
}
long diffTime=System.currentTimeMillis() - startTime;
System.err.println( "Elapsed: " + diffTime + "ms." );
startTime=System.currentTimeMillis();
for (long i=0; i < 1000000000l; i++)
{
Test.instance.blubber();
}
diffTime=System.currentTimeMillis() - startTime;
System.err.println( "Elapsed: " + diffTime + "ms." );
}
}
Es zeigt sich, dass der nicht-statische Methoden-zugriff mithilfe einer statischen Klasseninstanz im Schnitt etwa 15% bis 20% schneller ist, als der direkte Aufruf der statischen Methode. Warum ist das so?