tie 3 oblasti sa na zaciatku nastavia na 3 rovnako velke casti? tie velkosti su neni dynamicke? resp. da sa nastavit aby boli dynamicke? alebo sa da nastavit ina strategia gc? narazam teraz na to, ze pokial mi aplikacia bezi na starsom JVM a ja ju upgradnem na vyssiu verziu, ktora uz pouziva iny GC, tak samotne GC mi moze robit problemy, ktore som predtym nemal
Mám dojem, že JVM používá generační GC od doby, kdy Java byla ve verzi 1.3 - tedy už celých 14 let. V tomhle případě bych se nebál, že se něco změní.
Pokud se nemýlím, velikosti jednotlivých generací se mění dynamicky podle potřeby. Ale když to nebude stačit, JVM má asi "850 přepínačů":[http://stas-blogspot.blogspot.cz/2011/07/most-complete-list-of-xx-options-for.html] a některý z nich určitě změní požadované chování nebo nastaví, který GC použít (JVM jich má v sobě několik). Ale to všechno jsou extrémní případy. Většinou stačí nastavit dost paměti přes `-Xmx` a všechno funguje tak, jak má.
Zdenek Henek(2014-03-12 07:01)
Java (zatim) neodstranila zadny GC, takze muzete pouzivat stejnou implementatci GC i na nejnovejsi verzi. Jedine, co by se mohlo zmenit jsou parametry XX, ktere nejsou garantovane. Nepamatuji se, ze bysme meli nejaky problem pri prechodu z JDK 1.6ky na 1.7 v gc parametrech. Pokud mate problem s pauzama zkuste Concurrent mark sweep. My pouzivame pouze Concurrent mark sweep.
kobul(2014-03-17 16:13)
Pokud se nepletu, tak u "Mark and Sweep" garbage collectoru jsou ty generace nastavené napevno a to poměrem "old" a "young" generace. V OLD jsou déle žijící objekty, nové objekty se vytváří v "young". Young je ještě rozdělená na dvě stejně velké části, mezi kterými se objekty kopírují sem-tam. To v důsledku znamená, že nově vytvořený objekt může být max. velký jako polovina young generace. Velikost této generace se dá nastavit parametrem <code>-XX:NewRatio=?</code>, který udává poměr young generace ku old gen. Příklad: <code>Xmx=1G -XX:NewRatio=4</code> Poměr young:old je 1:4 tedy young = 200MB, 1/2 young = 100MB takže max. objekt, který je možno vytvořit, bude mít 100MB - proto 120MB narazilo na OOME...
alebo sa da nastavit ina strategia gc? narazam teraz na to, ze pokial mi aplikacia bezi na starsom JVM a ja ju upgradnem na vyssiu verziu, ktora uz pouziva iny GC, tak samotne GC mi moze robit problemy, ktore som predtym nemal
Pokud se nemýlím, velikosti jednotlivých generací se mění dynamicky podle potřeby. Ale když to nebude stačit, JVM má asi "850 přepínačů":[http://stas-blogspot.blogspot.cz/2011/07/most-complete-list-of-xx-options-for.html] a některý z nich určitě změní požadované chování nebo nastaví, který GC použít (JVM jich má v sobě několik). Ale to všechno jsou extrémní případy. Většinou stačí nastavit dost paměti přes `-Xmx` a všechno funguje tak, jak má.