Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 24728|Odpoveď: 1

[Zdroj] Nepodarilo sa mi vyhradiť dosť miesta pre 2097152KB objektovú haldu

[Kopírovať odkaz]
Zverejnené 24. 7. 2017 10:43:36 | | | |
Chyba: Nepodarilo sa vyhradiť dostatok miesta pre 2097152KB objektovú haldu

Spustil som activemq a nahlásil chybu spôsobenú príliš veľkou alokáciou, takže pri alokácii MQTT pamäte je potrebné určiť kombináciou veľkosti serverovej pamäte (použite free -g) a toho, či JDK podporuje veľkosť pamäte.

Nastavenia parametrov JVM

Hlavné parametre:
-Xms: Počiatočná veľkosť pamäte
-Xmx: Maximálna veľkosť pamäte
-Xmn: Veľkosť mladšej generácie

Použite príkaz Java -Xmx2047M -version, aby ste zistili, či vyhovuje:


Riešenie:

Start - > Ovládací panel - > Systém - > Pokročilé nastavenia - > Premenné prostredia - > Systémové premenné

Nová premenná:
Názov premennej: _JAVA_OPTIONS   
Hodnota premennej: -Xmx1G






Predchádzajúci:MySQL dotazuje tabuľku bez prázdneho počtu záznamov
Budúci:Rozdiel medzi serverom a klientom virtuálneho stroja Javy JVM
 Prenajímateľ| Zverejnené 24. 7. 2017 10:45:37 |
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.

Testovacia metóda: Použite príkaz java -XmxXXXXM -version na testovanie v príkazovom riadku a potom postupne zvyšujte hodnotu XXXX, ak beží normálne, znamená to, že špecifikovaná veľkosť pamäte je dostupná, inak sa vytlačí chybová správa.
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com