|
|
Zverejnené 14. 8. 2017 16:49:22
|
|
|
|

Chyba nastala pri inicializácii VM Nepodarilo sa vyhradiť dosť miesta pre 3145728KB objektovú haldu
Nedávno pracujem na programe pre Javu. Pôvodne sa mi vždy páčila správa pamäte v Jave, nemusíš sa starať o alokáciu pamäte, stačí alokovať, garbage collector ti pamäť získa späť. Teraz je program vyvinutý s veľkým množstvom dát a kvôli rýchlosti načítam všetky informácie do pamäte, čo zabezpečí rýchlu reakciu. Stále opakovane počítam pamäť a myslím na vlastné množstvo dát, ktoré by malo na začiatku stačiť (môj počítač má 4G pamäť, hoci Windows rozpoznáva 3,5G, ale malo by to byť v poriadku v porovnaní s mojím aktuálnym objemom dát).
Nečakane program prvého experimentu bežal niekoľko hodín a narazil na výnimku Out of Memory. Keď som sa pozrel na nastavenia vlastného VM, nastavil som -Xms512M -Xmx1024M. Bez rozmýšľania som to priamo zmenil na -Xms512M -Xmx2048M, a výsledkom bolo, že som nemohol vyhradiť dosť miesta pre objektovú haldu. Program sa nemôže postaviť. Až vtedy som si uvedomil, že stále existuje limit pôvodnej maximálnej pamäte. Prehľadal som internet a našiel som mnoho článkov, ktoré sa tejto téme zaoberajú. Nakoniec som našiel najužitočnejší článok na fóre BEA DEV2DEV
Tu moderátor YuLimin vykonal test a dospel k záveru:
Verzia Company JVM Klient s maximálnou pamäťou (mega) Server
NE 1.5.x 1492 1520
SUN 1.5.5(Linux) 2634 2660
SUN 1.4.2 1564 1564
SUN 1.4.2(Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Teraz JDK1.6.0_05 používam, testoval som to. Najväčší problém v klientskom stave je, že môj JDK nerozpoznáva parameter -Server a nemôže otestovať stav servera. Odhady sú približne rovnaké.
SUN 1.6.0 1442 N/a
Zdá sa, že v Jave nie je možné použiť veľkú pamäť. A všeobecné príslovie je, že ak je pamäť príliš veľká, čas zberu odpadu bude dlhý. To je tiež pochopiteľné, zvyčajne sa zbiera, keď pamäť nestačí, skenovanie 2G pamäte je samozrejme oveľa pomalšie ako 1G a je viac pamäťových objektov, odhadovaný vzťah exponenciálne rastie.
Nižšie sú priložené testovacie metódy a testovacie záznamy spoločnosti YuLimin.
Metóda testovania:Otestujte pomocou príkazu java -XmxXXXXM -version pod príkazovým riadkom, a potom postupne zvyšovať hodnotu XXXX, ak sa vykoná normálne, znamená to, že špecifikovaná veľkosť pamäte je dostupná, inak sa vytlačí chybová správa.
Otestujte maximálnu podporovanú pamäť JVM a potom nastavte environmentálne premenné na systéme
Názov premenných: _JAVA_OPTIONS Hodnota: - Xmx1G
|
Predchádzajúci:používa sa plugin jQuery na celú obrazovku "jQuery Fullscreen Plugin"Budúci:Rozdiel medzi certifikátmi SSL, OV, DV a EV
|