the other side ([info]ukawi) rakstīja [info]koderi kopienā,
@ 2003-07-02 12:53:00

Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Programmēšanas stils un efektivitāte (Java)
Zinu, ka esmu ļoti piekasīgs. Sastapu kodā apmēram tādas rindiņas A, kuru aizstāju ar rindiņām B:

A: String result = (new Integer(i)).toString();
B: String result = Integer.toString(i);


Vienīgais šī koda uzdevums ir pārvērst skaitli (int) par simbolu virkni (String). Izmantojot pusdienlaiku, lai pamatotu savu darbību, uzrakstīju divus mazus testus: TestA izmanto A fragmentu, TestB - B fragmentu. Testi tika izpildīti vairākkārt un jauktā secībā, bet rezultāti visos gadījumos bija šādi:

-- TestA results ----------
free memory before: 1782832
free memory after: 1782464
memory used: 368
-- TestB results ----------
free memory before: 1782832
free memory after: 1782480
memory used: 352


Kā redzams, A gadījumā tiek izmantots vairāk atmiņas, jo tiek izveidots papildus objekts (Integer), kuru tālāk programmā neizmanto. Lai arī 16 baiti nav daudz, tomēr šādas rindiņas tika diezgan plaši izmantotas visā kodā. Papildus atmiņas patēriņam, zināmi resursi nepieciešami arī drazas savācējam (garbage collector), lai šo atmiņu atbrīvotu.
Ar to tiek pierādīts, ka manam piekasīgumam ir arī kāds iemesls. Viss.


public final class TestA {
  public static void main(String args[]){
    Runtime r = Runtime.getRuntime();

    long freeMemBefore = r.freeMemory();
    String result = (new Integer(666)).toString();
    long freeMemAfter = r.freeMemory();

    System.out.println("-- TestA results ----------");
    System.out.println("free memory before: " + freeMemBefore);
    System.out.println("free memory after:  " + freeMemAfter);
    System.out.println("memory used:        " + (freeMemBefore - freeMemAfter));
  }
}
public final class TestB {
  public static void main(String args[]){
    Runtime r = Runtime.getRuntime();

    long freeMemBefore = r.freeMemory();
    String result = Integer.toString(666);
    long freeMemAfter = r.freeMemory();

    System.out.println("-- TestB results ----------");
    System.out.println("free memory before: " + freeMemBefore);
    System.out.println("free memory after:  " + freeMemAfter);
    System.out.println("memory used:        " + (freeMemBefore - freeMemAfter));
  }
}


(Lasīt komentārus)

Nopūsties:

No:
Lietotājvārds:
Parole:
Ievadi te 'qws' (liidzeklis pret spambotiem):
Temats:
Tematā HTML ir aizliegts
  
Ziņa:

Gandrīz jau aizmirsu pateikt – šis lietotājs ir ieslēdzis IP adrešu noglabāšanu. Operatore Nr. 65.
Neesi iežurnalējies. Iežurnalēties?