Vlákno názorů k článku Monitorování procesů a správa paměti v JDK6 a JDK7 (1) od anonym - ovšem ke skrytému vytvoření nového objektu dojít ve...

  • Článek je starý, nové názory již nelze přidávat.
  • 6. 1. 2011 15:48

    bez přezdívky

    ovšem ke skrytému vytvoření nového objektu dojít ve skutečnosti může a skutečně i několikrát dojde – přijdete na to, kde a proč?

    Asi tady

    str.append(i);
    str.append(' ');

    a tady

    return str.toString();

    V prvním případě kvůli občasné realokaci velikostí již nedostačujícího StringBufferu str (alokace nového bufferu, kopie z původního místa, úprava referencí, uvolnění původního objektu), v druhém jednorázová konverze StringBuffer -> String.

  • 6. 1. 2011 18:09

    Pavel Tišnovský
    Zlatý podporovatel

    Ano presne - k realokacim StringBufferu|Bu­ilderu bude dochazet ve smycce, protoze puvodni velikost je pro sestnact znaku.

    A str.toString() udela defenzivni kopii retezce, aby se pole znaku StringBufferu|Bu­ilderu nesdilelo - to je dulezite, protoze kdyby se vratilo interni pole StringBufferu|Bu­ilderu jako podle specifikace nemenny retezec, mohl by nekdo zmenou ve StringBufferu|Bu­ilderu dosahnou i zmeny v "nemenitelnem" Stringu ;-)