|
|
Publicerad på 2017-08-14 16:49:22
|
|
|
|

Fel uppstod vid initialiseringen av VM Kunde inte reservera tillräckligt med utrymme för en 3145728KB objektheap
Jobbar nyligen på ett program för Java. Ursprungligen har jag alltid gillat Javas minneshantering, ingen anledning att oroa sig för att allokera minne, bara allokera, skräpsamlaren återtar minnet åt dig. Nu är programmet utvecklat med en stor mängd data, och för att öka hastigheten kommer jag att ladda all information i minnet, vilket säkerställer ett snabbt svar. Jag räknar fortfarande minnet upprepade gånger och tänker på min egen datamängd, vilket borde räcka i början (min maskin har 4G-minne, även om Windows känner igen 3,5G, men det borde vara okej jämfört med min nuvarande datavolym).
Oväntat kördes programmet för det första experimentet i några timmar och stötte på ett undantag för minnesbrist. När jag tittar på mina egna VM-inställningar satte jag -Xms512M -Xmx1024M. Utan att tänka på det ändrade jag direkt till -Xms512M -Xmx2048M, och resultatet blev att jag inte kunde reservera tillräckligt med utrymme för objektheap. Programmet kan inte resa sig. Först då insåg jag att det fortfarande fanns en gräns för det ursprungliga maximala minnet. Jag sökte på internet och hittade många artiklar som diskuterade detta ämne. Till slut hittade jag den mest användbara artikeln på BEAs DEV2DEV-forum
Här gjorde moderatorn YuLimin testet och kom fram till slutsatsen:
Företagets JVM-version Maximalt minne (mega) klient Maximalt 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
Jag använder JDK1.6.0_05 nu, testade det. Det största problemet i klienttillståndet är att min JDK inte känner igen -Server-parametern och kan inte testa serverstatusen. Uppskattningarna är ungefär desamma.
SÖN 1.6.0 1442 N/a
Det verkar som att det är omöjligt att använda stort minne i Java. Och det allmänna ordspråket är att om minnet är för stort kommer tiden för skräphantering att vara lång. Detta är också förståeligt, det samlas generellt in när minnet inte räcker, skanning av 2G-minne är förstås mycket långsammare än 1G, och det finns fler minnesobjekt, den uppskattade relationen ökar exponentiellt.
Bifogat nedan följer YuLimins testmetoder och testjournaler.
Testmetod:Testa med kommandot Java -XmxXXXXM -version under kommandoraden, och sedan gradvis öka värdet på XXXX, om det körs normalt betyder det att den angivna minnesstorleken är tillgänglig, annars kommer ett felmeddelande att skrivas ut.
Testa det maximalt stödda minnet för JVM:n och ställ sedan in miljövariablerna i systemet
Variabelnamn: _JAVA_OPTIONS Värde: - Xmx1G
|
Föregående:jQuery fullskärmsplugin "jQuery Fullscreen Plugin" användsNästa:Skillnaden mellan SSL, OV, DV och EV-certifikat
|