Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 24728|Odpověď: 1

[Zdroj] Nepodařilo se vyhradit dostatek místa pro objektovou haldu o velikosti 2097152KB

[Kopírovat odkaz]
Zveřejněno 24.07.2017 10:43:36 | | | |
Chyba: Nepodařilo se rezervovat dostatek místa pro objektovou haldu o velikosti 2097152KB

Spustil jsem activemq a nahlásil chybu způsobenou příliš velkým množstvím alokace, takže při alokaci paměti MQTT je potřeba ji určit kombinací velikosti serverové paměti (použijte free -g) a toho, zda JDK podporuje velikost paměti.

Nastavení parametrů JVM

Hlavní parametry:
-Xms: Počáteční velikost paměti
-Xmx: Maximální velikost paměti
-Xmn: Mladší generace

Použijte příkaz Java -Xmx2047M -version a zjistěte, zda splňuje požadavky:


Řešení:

Start - > Ovládací panel - > Systém - > Pokročilá nastavení - > Proměnné prostředí - > Systémové proměnné

Nová proměnná:
Název proměnné: _JAVA_OPTIONS   
Hodnota proměnné: -Xmx1G






Předchozí:MySQL dotazuje tabulku bez prázdného počtu záznamů
Další:Rozdíl mezi serverem a klientem virtuálního stroje JVM Javy
 Pronajímatel| Zveřejněno 24.07.2017 10:45:37 |
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.

Testovací metoda: Použijte příkaz java -XmxXXXXM -version k testování v příkazovém řádku a poté postupně zvyšujte hodnotu XXXX, pokud běží normálně, znamená to, že je k dispozici zadaná velikost paměti, jinak se vypíše chybová zpráva.
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com