|
|
Zveřejněno 14.08.2017 16:49:22
|
|
|
|

Při inicializaci VM došlo k chybě Nepodařilo se vyhradit dostatek místa pro objektovou haldu o velikosti 3145728KB
Nedávno pracuji na programu pro Javu. Původně se mi vždycky líbila správa paměti v Javě, nemusíš se starat o alokaci paměti, stačí alokovat, garbage collector ti paměť získá zpět. Program je nyní vyvinut s velkým množstvím dat a kvůli rychlosti načtu všechny informace do paměti, což zajistí rychlou odezvu. Stále opakovaně počítám paměť a přemýšlím o vlastním množství dat, což by mělo na začátku stačit (můj počítač má 4G paměť, i když Windows rozpoznává 3,5G, ale mělo by to být v pořádku ve srovnání s mým současným objemem dat).
Nečekaně program prvního experimentu běžel několik hodin a narazil na výjimku Out of Memory. Když jsem se podíval na nastavení svého stroje, nastavil jsem -Xms512M -Xmx1024M. Bez přemýšlení jsem to přímo změnil na -Xms512M -Xmx2048M, a výsledkem bylo, že jsem nemohl vyhradit dostatek místa pro objektovou haldu. Program se nemůže zvednout. Teprve tehdy jsem si uvědomil, že stále existuje limit na původní maximální paměť. Prohledal jsem internet a našel mnoho článků o tomto problému. Nakonec jsem našel nejužitečnější článek na fóru BEA DEV2DEV
Zde moderátor YuLimin provedl test a dospěl k závěru:
Verze firemního JVM Klient s maximální pamětí (mega) Server
NE 1.5.x 1492 1520
SUN 1.5.5(Linux) 2634 2660
NE 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
Teď JDK1.6.0_05 používám, testoval jsem to. Největší problém ve stavu klienta je, že můj JDK nerozpoznává parametr -Server a nemůže otestovat stav serveru. Odhady jsou zhruba stejné.
NE 1.6.0 1442 N/A
Zdá se, že v Javě není možné používat velkou paměť. A obecně se říká, že pokud je paměť příliš velká, doba sběru odpadu bude dlouhá. To je také pochopitelné, obecně se sbírá tehdy, když paměť nestačí, skenování 2G paměti je samozřejmě mnohem pomalejší než 1G a je více paměťových objektů, odhadovaný vztah exponenciálně roste.
Níže jsou přiloženy testovací metody a záznamy YuLimin.
Metoda testování:Testujte pomocí příkazu java -XmxXXXXM -version pod příkazovým řádkem, a poté postupně zvyšovat hodnotu XXXX; pokud je spuštěn normálně, znamená to, že je k dispozici zadaná velikost paměti, jinak se vytiskne chybová zpráva.
Otestujte maximální podporovanou paměť JVM a poté nastavte proměnné prostředí v systému
Název proměnné: _JAVA_OPTIONS Hodnota: - Xmx1G
|
Předchozí:používá se plugin jQuery na celou obrazovku "jQuery Fullscreen Plugin"Další:Rozdíl mezi certifikáty SSL, OV, DV a EV
|