Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 24728|Svare: 1

[Kilde] Kunne ikke reservere nok plass til 2097152KB objektheap

[Kopier lenke]
Publisert på 24.07.2017 10:43:36 | | | |
Feil: Kunne ikke reservere nok plass til 2097152KB objektheap

Jeg startet activemq og rapporterte en feil som skyldtes for mye allokering, så når man allokerer MQTT-minne, må det bestemmes ved å kombinere serverens minnestørrelse (bruk free -g) og om JDK støtter minnestørrelsen.

JVM-parameterinnstillinger

Hovedparametere:
-Xms: Innledende minnestørrelse
-Xmx: Maksimal minnestørrelse
-Xmn: Yngre generasjonsstørrelse

Bruk kommandoen Java -Xmx2047M -version for å se om den overholder:


Løsning:

Start - > Kontrollpanel - > System - > Avanserte innstillinger - > Miljøvariabler - > Systemvariabler

Ny variabel:
Variabelnavn: _JAVA_OPTIONS   
Variabel verdi: -Xmx1G






Foregående:MySQL spør en tabell uten et tomt antall poster
Neste:Forskjellen mellom server og klient i Javas virtuelle maskin JVM
 Vert| Publisert på 24.07.2017 10:45:37 |
Jobber nylig med et program for Java. Opprinnelig har jeg alltid likt Javas minnehåndtering, du trenger ikke bekymre deg for å allokere minne, bare alloker, søppelsamleren vil ta tilbake minnet for deg. Nå er programmet utviklet med store mengder data, og for å spare hastighet skal jeg laste all informasjonen inn i minnet, noe som vil sikre rask respons. Jeg teller fortsatt minnet gjentatte ganger, og tenker på min egen datamengde, som burde være nok i starten (maskinen min har 4G-minne, selv om Windows gjenkjenner 3,5G, men det bør være fint sammenlignet med mitt nåværende datavolum).

Uventet gikk programmet til det første eksperimentet i noen timer og opplevde et unntak for ute av hukommelse. Når jeg ser på mine egne VM-innstillinger, satte jeg -Xms512M -Xmx1024M. Uten å tenke over det, endret jeg det direkte til -Xms512M -Xmx2048M, og resultatet var at jeg ikke kunne reservere nok plass til objektheap. Programmet klarer ikke å reise seg. Først da innså jeg at det fortsatt var en grense for det opprinnelige maksimale minnet. Jeg søkte på Internett og fant mange artikler som diskuterte dette temaet. Til slutt fant jeg den mest nyttige artikkelen på BEAs DEV2DEV-forum

Her gjennomførte moderator YuLimin testen og kom til konklusjonen:

Selskapets JVM-versjon Maksimal minne (mega) klient Maksimal minne (mega) server

SØN 1.5.x 1492 1520

SUN 1.5.5(Linux) 2634 2660

SØN 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

Jeg bruker JDK1.6.0_05 nå, testet det. Det største problemet i klienttilstanden er at JDK-en min ikke gjenkjenner -Server-parameteren og kan ikke teste serverens tilstand. Estimatene er omtrent de samme.

SØN 1.6.0 1442 N/a

Det virker som det er umulig å bruke stort minne i Java. Og det generelle ordtaket er at hvis minnet er for stort, vil søppelinnsamlingstiden bli lang. Dette er også forståelig, vanligvis samlet inn når minnet ikke er nok, skanning av 2G-minne er selvfølgelig mye tregere enn 1G, og det finnes flere minneobjekter, den estimerte sammenhengen øker eksponentielt.

Vedlagt nedenfor er YuLimins testmetoder og testprotokoller.

Testmetode: Bruk kommandoen java -XmxXXXXM -version for å teste på kommandolinjen, og øk deretter gradvis verdien av XXXX; hvis det kjører normalt, betyr det at den angitte minnestørrelsen er tilgjengelig, ellers vil en feilmelding bli skrevet ut.
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com