Kedy dojde k odstraneniu objektu?

Tomas Studva tstudva na gmail.com
Úterý Únor 24 23:23:59 CET 2009


To kedy sa dealokovalo f, zaviselo od velkosti pola, cize ci sa este 
pred cyklom automaticky spustilo gc.

Treba si vsak uvedomit ze kompilator nemoze takmer vobec ovplyvnit 
dealokaciu - ak by bol predposledny prikaz bloku volanie nejakej metody, 
tak uz nik nevie co sa stalo. Nejako vsak ten gc vie ze na f uz nic 
neukazuje, alebo je v inej generacii ako stuff. Napada mi reference 
counting, ale to sa zevraj nepouziva v gc-ckach (viem ale ze ref-count. 
napr. pouziva Cocoa).

Zdenek Tronicek  wrote / napísal(a):
> Ja jsem popisoval, jak se chova JVM za "normalnich" podminek. V 
> okamziku, kdy zacne dochazet pamet, zacne JVM drsne optimalizovat. A 
> ze to umi, lze videt na tomto prikladu (z Vaseho kodu jsem vypustil 
> blok):
>
>         System.out.println("start");
>         // vytvorim Foo
>         Foo f = new Foo(null);
>         // vytvorim pole Stuff
>         Stuff[] theStuffs = new Stuff[100000];
>         for (int i = 0; i < theStuffs.length; i++) {
>             theStuffs[i] = new Stuff();
>         }
>         // nez se dojde sem, je po objektu f
>         while (true) {
>             System.out.println("aaa");
>             Runtime.getRuntime().gc();
>             try {
>                 Thread.sleep(200);
>             } catch (InterruptedException e) {
>                 // TODO Auto-generated catch block
>                 e.printStackTrace();
>             }
>         }
>
> Na mem pocitaci dojde k dealokaci objektu f jeste drive, nez se 
> vstoupi do smycky while. Jak k tomu muze dojit? Java neco takoveho 
> neumoznuje, jde ciste o optimalizaci JVM.
> Mimochodem, myslim, ze tohle je na hranici toho, co jeste lze delat, 
> protoze kdyby nejaky program spolehal na to, ze objekt nemuze byt 
> dealokovan pred koncem platnosti promenne f (tj. pred koncem metody), 
> nebude fungovat.
>
> Pokud jde o ty lokalni promenne, tak ve vypise javap je jejich pocet 
> za retezcem Locals= a po dobu vykonavani metody se tato hodnota nemeni.
>
> Z.T.




Další informace o konferenci Konference