Blog
Skip to end of metadata
Go to start of metadata

Az objektum orientált programozás terjedésével a monolitikus programokban hívők egyik nagy ellenérve az öröklődéssel és a polimorfizmussal kapcsolatban a túlzott erőforrásigény volt. A JavaSpecialist blog gazdája készített egy mérést, amely alapján mi is készítettünk méréseket, amelyek meglepő eredménnyel zárultak. Egészséges Java öntudattal az ember azt kell gondolja, hogy az interface vagy az abstract osztályok használata nem lassít a program futásán, kis gyanakvással pedig úgy gondolja, hogy "jó-jó, biztos lassít valamit, de nem sokat". Nosza, mérésre fel. Az alapkoncepció egyszerűen az, hogy írjunk egy csomó osztályt, amelyek megvalósítják a tesztelendő folyamatokat:

Used.java
public class Used
{
  public int echo(int param)
  {
    return param;
  }
}

illetve

Use.java
public class Use
{
  private final Used used;
  public Use(Used used)
  {
    this.used = used;
  }
 
  public int run(int i)
  {
    return used.echo(i);
  }
}

Ezekből kiindulva csinálunk sima interfész-implementációt, többszörös implementációt, absztrakt-kiterjesztést, többszörös absztakt-kiterjesztést, illetve absztrakt-kiterjesztést továbbörökítünk. A program megméri, hogy 500 millió ciklus mennyi idő alatt fut le a run metódusból, illetve minimumot, maximumot és átlagot számol. Nézzünk néhány mérési eredményt, amelyek különféle JVM-en készültek:

 1.6.0_03-b051.5.0_14-b031.6.0_01-b061.5.0_07-b03
Inline1067ms575ms896ms895ms
Simple1921ms1144ms1833ms1641ms
One implement1931ms1448ms2313ms1858ms
Two implement1946ms1206ms2314ms1605ms
One abstract1961ms1228ms1834ms1604ms
Two abstract1147ms1224ms1835ms1604ms
Override1482ms1213ms2310ms1856ms

Mint látható, az eredmények igen változatosak... elgondolkodtató, hogy melyik eredményt miért kapjuk... :)

A (NetBeans) projekt, forrásokkal együtt letölthető a Polymorph.zip.

      
      
Page viewed times