Čo programujete v Jave?

fail

Re:Čo programujete v Jave?
« Odpověď #60 kdy: 22. 07. 2014, 18:18:45 »
Jenom mě tak napadá: všimli jste si, že 90% obsahu této diskuse je přesně to, co původní tazatel explicitně nechtěl?
nas v tom gulas. odpoved 6 tazatel zatrolil: "Ešte by ma zaujímalo, "


Sten

Re:Čo programujete v Jave?
« Odpověď #61 kdy: 22. 07. 2014, 18:24:20 »
Jinak já pro implementaci RAII (hlavně pro zdroje z nativního kódu) používám takový malý hack: ve finalize javovského objektu pošlu pomocí JNI do fronty funktor, který umí zdroj uklidit.
Hmm, zajímavé, ale... proč? Obdobný mechanismus nahrazující finalize přeci byl přidán již v JDK 1.2 (PhantomReference a ReferenceQueue).

Druhá věc je označení RAII, ale na to tady určitě naběhne zásahová jednotka, takže to raději nechám stranou :-)

Rozdíl je v tom, že ReferenceQueue je pasivní a je nutné ji pollovat, zatímco to moje je aktivní a uvolňuje zdroje ve chvíli, kdy GC uklidí ten ukazatel. Ten rozdíl se může zdát nepatrný, ale na telefonech to u dlouhoběžící aplikace dělá docela velký rozdíl ve spotřebě baterie.

podlesh

Re:Čo programujete v Jave?
« Odpověď #62 kdy: 22. 07. 2014, 18:44:47 »
Jenom mě tak napadá: všimli jste si, že 90% obsahu této diskuse je přesně to, co původní tazatel explicitně nechtěl?
nas v tom gulas. odpoved 6 tazatel zatrolil: "Ešte by ma zaujímalo, "
Je poměrně smutné že když někdo explicitně nezdůrazní "nechci kydy" tak je to automaticky považováno za trolling.

Ještě smutnější je, že to reálně může být fakt záměrné rozpoutání flamewar a těžko se to dozvíme.

podlesh

Re:Čo programujete v Jave?
« Odpověď #63 kdy: 22. 07. 2014, 18:53:16 »
pošlu do fronty funktor, který umí zdroj uklidit.
Rozdíl je v tom, že ReferenceQueue je pasivní a je nutné ji pollovat, zatímco to moje je aktivní a uvolňuje zdroje ve chvíli, kdy GC uklidí ten ukazatel. Ten rozdíl se může zdát nepatrný, ale na telefonech to u dlouhoběžící aplikace dělá docela velký rozdíl ve spotřebě baterie.
To jsem trochu zmatený... Pokud se ten funktor provede okamžitě, tak to tam není fronta, ne? Já si pod pojmem "fronta" představím datovou strukturu (FIFO, v tomto konkrétním případě). Jak vypadá aktivní fronta? Že se při vložení funktoru probudí vlákno které funktor vyzvedne a provede? To by se asi dalo udělat i v bytecode (možná ne tak efektivně, nevím jak jsou na tom synchronizační primitiva u ARM JVM).

Sten

Re:Čo programujete v Jave?
« Odpověď #64 kdy: 22. 07. 2014, 19:07:01 »
pošlu do fronty funktor, který umí zdroj uklidit.
Rozdíl je v tom, že ReferenceQueue je pasivní a je nutné ji pollovat, zatímco to moje je aktivní a uvolňuje zdroje ve chvíli, kdy GC uklidí ten ukazatel. Ten rozdíl se může zdát nepatrný, ale na telefonech to u dlouhoběžící aplikace dělá docela velký rozdíl ve spotřebě baterie.
To jsem trochu zmatený... Pokud se ten funktor provede okamžitě, tak to tam není fronta, ne? Já si pod pojmem "fronta" představím datovou strukturu (FIFO, v tomto konkrétním případě). Jak vypadá aktivní fronta? Že se při vložení funktoru probudí vlákno které funktor vyzvedne a provede? To by se asi dalo udělat i v bytecode (možná ne tak efektivně, nevím jak jsou na tom synchronizační primitiva u ARM JVM).

Jde o frontu smyčky zpráv (v Androidu Handler, ve Swingu SwingUtilities.doLater), takže ano, pokud to vlákno neběží, tak jej to probudí, a pokud ve frontě nic není, tak se vlákno uspí.