Java bez garbage collectoru

dl

Java bez garbage collectoru
« kdy: 06. 04. 2014, 17:49:15 »
cetl jsem na foru, ze se da pouzivat java s vypnutym gc. mate stim nekdo zkusenost, je to mozne a bezpecne? dik.

tady citace:
quite a lot of what banks call low latency is done in Java. And not even Real Time Java - just normal Java with the GC turned off. The main trick here is to make sure you've exercised all of your code enough for the jit to have run before you switch a particular VM into prod ( so you have some startup looping that runs for a couple of minutes - and hot failover).
« Poslední změna: 06. 04. 2014, 21:35:44 od Petr Krčmář »


borekz

Re:java bez gc
« Odpověď #1 kdy: 06. 04. 2014, 18:49:40 »
Když spojíš v Javě dva Stringy, tak se nejprve vytvoří StringBuilder, do kterého se oba nakopírují a potom se výsledné pole znaků klonuje pro nový řetězec, který se také instancuje. StringBuilder a jeho pole znaků se zahodí a bez GC zůstanou trčet v paměti.

v

Re:java bez gc
« Odpověď #2 kdy: 06. 04. 2014, 19:08:40 »

Re:java bez gc
« Odpověď #3 kdy: 06. 04. 2014, 19:13:15 »
O tom, ze by nekdo poustel Javu s vypnutym GC jsem moc neslysel (a prijde mi to trochu jako hloupost - freeze od gc je porad lepsi nez OutOfMemory, o tom, ze GC vetsinou Stop The World nezpusobi a vystaci si s vlastnim threadem nemluve).

Ale relativne casto se pouzivaji specialni datove struktury, ktere GC nepotrebuji - trebas ringbuffery.

perceptron

Re:java bez gc
« Odpověď #4 kdy: 06. 04. 2014, 21:22:31 »


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java bez garbage collectoru
« Odpověď #5 kdy: 06. 04. 2014, 22:32:28 »
cetl jsem na foru, ze se da pouzivat java s vypnutym gc. mate stim nekdo zkusenost, je to mozne a bezpecne? dik.

tady citace:
quite a lot of what banks call low latency is done in Java. And not even Real Time Java - just normal Java with the GC turned off. The main trick here is to make sure you've exercised all of your code enough for the jit to have run before you switch a particular VM into prod ( so you have some startup looping that runs for a couple of minutes - and hot failover).

Jde to, ale asi to není úplně dobrý nápad. To už je lepší využívat nativní paměť (mimo haldu JVM).

Kolemjdoucí

Re:Java bez garbage collectoru
« Odpověď #6 kdy: 06. 04. 2014, 22:43:51 »
cetl jsem na foru, ze se da pouzivat java s vypnutym gc. mate stim nekdo zkusenost, je to mozne a bezpecne? dik.

tady citace:
quite a lot of what banks call low latency is done in Java. And not even Real Time Java - just normal Java with the GC turned off. The main trick here is to make sure you've exercised all of your code enough for the jit to have run before you switch a particular VM into prod ( so you have some startup looping that runs for a couple of minutes - and hot failover).

Proč? Proč bych si měl zvolit Javu, a pak ji prznit vypínáním GC? GC je naprostý základ na kterém Java stojí. Jestli nechcete GC, pište v C++. Pokud stojíte o to omezit vliv GC na běh aplikace v Javě, zvolte nějakou paralelní variantu GC (-XX:+UseConcMarkSweepGC nebo –XX:+UseG1GC) a napište aplikaci tak aby nevytvářela spoustu "garbage" a zapomeňte na to že GC existuje - pak to bude fungovat!

ahorek

Re:Java bez garbage collectoru
« Odpověď #7 kdy: 07. 04. 2014, 01:56:40 »
Pro lowlatency aplikace je vhodnější C++ (z výkonového hlediska nabízí mnohem více možností).
Javu takto sice využít jde, ale je to spíše pro její skalní příznivce než něco reálného.

Re:Java bez garbage collectoru
« Odpověď #8 kdy: 07. 04. 2014, 08:09:35 »
jestli se nepletu tak: java nema destruktor. a tim ze existuje reference na objekt tak existuje. reference ukazuje na null, objekt se zrusi. jak by jste zarucil tuto funkcionalitu?

Kolemjdoucí

Re:Java bez garbage collectoru
« Odpověď #9 kdy: 07. 04. 2014, 09:30:25 »
se da pouzivat java s vypnutym gc.

To jsou nesmysly, nikdo to nešlo, nejde to a evidentně to nikdy nepůjde. Dá se alokovat paměť mimo GC, ale GC vypnout nelze z principu.

fail

Re:Java bez garbage collectoru
« Odpověď #10 kdy: 07. 04. 2014, 10:16:37 »
zrejme nepochopeni diskuze tazatelem. lze s vybranymi castmi zachazet tak, ze je bude GC ignorovat.

http://www.docjar.com/docs/api/sun/misc/Unsafe.html

student

Re:Java bez garbage collectoru
« Odpověď #11 kdy: 07. 04. 2014, 14:52:00 »
GC vypnout nelze z principu.
Vsadis sa?

Myslim, ze to nepovedie k niecomu rozumnemu alebo funkcnemu, ale odstranenie casti programu by v opensource programe nemuselo byt dokonca ani velmi narocne.

Kolemjdoucí

Re:Java bez garbage collectoru
« Odpověď #12 kdy: 07. 04. 2014, 15:15:17 »
to nepovedie k niecomu rozumnemu alebo funkcnemu

Bingo.
Vsázet se nebudu, věřím vám.

Jakub Galgonek

Re:Java bez garbage collectoru
« Odpověď #13 kdy: 07. 04. 2014, 19:18:44 »
jestli se nepletu tak: java nema destruktor. a tim ze existuje reference na objekt tak existuje. reference ukazuje na null, objekt se zrusi. jak by jste zarucil tuto funkcionalitu?

Jen pro upřesnění: Obdobou destruktoru je v Javě metoda finalize(). GC ji volá, když na objekt už nevedou (poprvé) žádné reference. Docela vtipné na ní je, že má k dispozici referenci na objekt, takže ho může učinit opět dostupným a zabránit jeho vymazání. Každopádně nelze se spolehnout na to, kdy ji GC zavolá a kdy se objekt smaže. Takže programátor musí počítat s tím, že nic z toho se nestane "hned" poté, co na objekt už nebudou odkazovat žádné reference.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Java bez garbage collectoru
« Odpověď #14 kdy: 07. 04. 2014, 19:45:04 »
jestli se nepletu tak: java nema destruktor. a tim ze existuje reference na objekt tak existuje. reference ukazuje na null, objekt se zrusi. jak by jste zarucil tuto funkcionalitu?

Tak funguje počítání referencí. U GC v Javě by se objekt nezrušil hned. Místo destruktoru mají objekty finalizér, ale ten přináší jen problémy.