Cekal jsem trosku neco jineho, ale clanek paradni a tesim se na dalsi dil. Cekal jsem tipy a triky s jconsoli nebo podobnymi nastroji, hledani slabych mist v aplikaci apod. Srovnani vykonu pri pouziti Large Pages (v linuxu Hugepages). Srovnani vykonu ve virtualizovanem/nevirtualizovanem prostredi. Dik za clanek
K tomu se jeste dostaneme - myslim ted predevsim nastaveni heapu, povoleni large pages, volba GC, poctu vlaken alokovanych GC atd.
Me se napriklad v jedne benchmarkove aplikaci osvedcily tyto volby (pro osmijadro):
-XX:+UseParallelOldGC -XX:ParallelGCThreads=8 -XX:+AggressiveOpts
Ale pro jinou benchmarkovou aplikaci na tom samem stroji jsou tyto volby naopak horsi nez defaultni nastaveni ;-) A pro GUI aplikace, kde by nemelo byt patrne zpozdeni kvuli GC jsem zase zvolil G1, i kdyz ho Oracle prozatim povazuje za experimentalni.
Diky za clanek, tesim se na dalsi pokracovani.
Kdyz si ctu doporuceni v ruznych diskuzich ohledne System.gc()
tak se casto doctu ze System.gc() je evil a kdo ho pouziva tak
jenom proto protoze nekde udelal neco blbe co gc zabranuje
byt "dostatcne optimalni", hard core reseni je zakazat System.gc()
uplne.
Nicmene, co me prekvapilo kdysi bylo ze System.gc() tedy explictini
vyvoalni "full gc", ve skutecnosti nikde negarantuje smazani skutecne vsech
nepotrebnych objektu tj. ze kdyz mam hodne "mrtvych obejktu" na heape
a spustim v iteraci (naprikald 10 cyklu) System.gc() tak dosahnu toho
ze mi gc uvolni vic pameti (nez kdybych zavolal System.gc() jednou).
Coz je docela zajiamvy protoze to oznaceni "full gc" mi evokuje ze se
proleze cela struktura (at uz je to cokoliv) uz pri prvnim zavolani
System.gc().
Jinak to tveakovani parametru a vyber ruznych gc je taky sranda. Ja jsem
naprikald vyresil OutofMemory pouze tim ze jsem nastavil vetsi velikost
"eden generation" oblasti u doufalt gc collectoru, coz byl pro onu tridu
poctace "jenoduchy" MarkSweepCompact gc.
Myslim, ze "full gc" neni full prave proto, ze se nasla spousta matlalu, kteri to z ruznych obskurnich duvodu volaji vsude mozne a pak je nasledkem jen to, ze se aplikace zpomali, protoze full gc trva dlouho. Tak vetsinou dostanou jen procisteni edenu a jsou spokojeni a pritom to program tolik nezpomali. Takovy ten kompromis kdyz se stretnou idealy s praxi.