Jvm-spor

Jvm-spor h1>

Fa via App Store Les dette innlegget i var app!

Slett java minne for OS ved kjoring.

Anta at jeg har en Swings Java Application, jeg satte min Heap er 64MB og max Heap 2GB, nar brukeren starter programmet, vil logg inn skjermen vises, pa dette tidspunktet app bruker 64MB, rettigheter? Fra min Windows 7 kan jeg se at Java-programmet er tildelt 64 MB fra minnesresursmonitoren til operativsystemet (faktisk er det mer enn 64 MB fordi JVM trenger litt minne for det er oppgaven).

Deretter bruker brukeren en veldig tung jobb, da applikasjonen bruker 2G. Deretter logger brukeren ut programmet, logg inn skjermen vises igjen (programmet er ikke lukket enna). Pa dette tidspunktet er det virkelige minnet at programmet bruker 64MB (anta at dette er det perfekte minnestyringsprogrammet), men med operativsystemet bruker denne applikasjonen fortsatt 2G RAM, jeg kan se den pa ressursmonitoren til operativsystemet.

Jeg vil at programmet skal frigjore minnet til operativsystemet nar det ikke trenger a bruke et stort minne. Kan jeg gjore det pa kjoretid med java app?

Jeg mener nar programmet skal bruke 64 MB RAM, da gir operativsystemet det bare 64 MB, nar det krever 2 GB RAM, gir operativsystemet det 2 GB, etter at det trenger 64 MB RAM, gir operativsystemet det bare 64 MB bare igjen, jeg vil ikke ha det slosing 2000MB – 64MB = 1936MB.

Jeg har lagt ut mine testresultater der borte. I utgangspunktet er MaxHeapFreeRatio ikke respektert av alle GC-implementeringer, og for a gjore det verre, synes det a v re nodvendig at det er nok heapaktivitet for a utlose det pa en riktig mate, dvs. kan v re at du trenger 2 fulle GC-lop for a faktisk frigjore minnet til operativsystemet. Og hvis du har et sperret minnefotavtrykk pa X GB, ma du sannsynligvis tildele 1 eller 2 ganger av det belopet for a utlose nedgangen i bunken. Eller du ringer System.gc () manuelt.

Hvis ytelse ikke er et problem, og minnefotavtrykk er alt som teller, prov:

Jeg vil at programmet skal frigjore minnet til operativsystemet nar det ikke trenger a bruke et stort minne. Kan jeg gjore det pa kjoretid med java app?

Under noen omstendigheter vil GC frigjore minne tilbake til operativsystemet selv, men jeg er ikke klar over noen JVM som tillater et program a fortelle GC a gjore dette. Og pa toppen av det er GC ganske konservativ om a gjore dette fordi. som en generell regel . JVM vil operere mer effektivt med mer minne, og kontinuerlig a be om / gi tilbake minne til operativsystemet er ineffektivt.

V r oppmerksom pa at GC tuning-alternativet -XX: MaxHeapFreeRatio kan brukes til a angi maksimumsforholdet for fri til brukt hoyde for GC vil gi minne tilbake. Det er imidlertid komplikasjoner. For eksempel, ikke alle tilgjengelige GCs respekterer dette alternativet. Hvis du skal prove denne tiln rmingen, foreslar jeg at du gjor noen undersokelser. og ikke forvent mirakler.

Serialgc i hotspot vil gi minne tilbake. i det minste pleide det. Din forestilling vil nese dykke.

Alle soppelsamlere i IBM J9 jvm vil frigjore minne. Jeg er ikke sikker pa at denne jvm er en gratis nedlasting.

Det beste svaret er, hvorfor er du bekymret? Minne er greit billig i disse dager, og gratis minne er bortkastet minne. Er dette faktisk et problem? Operativsystemet vil uansett vise det ekstra ubrukte minnet til disken. Det beste svaret er a ignorere det. 🙂

Du kan ogsa vurdere Googling off-heap lagring, kanskje Teracotta / eh cache.

Jeg la merke til i JDK1.7u6, at ved a bruke G1GC med en liten XMS og stor Xmx, vil soppelsamleren redusere storrelsen pa haugen etter noen soppelsamlinger hvor overskytende gjenstander er frigjort.

Du kan disponere gjenstander og foresla at soppelsamleren gjor sitt arbeid, men hvis GC ikke foler det nodvendig, blir foresporselen ignorert. Sa i sammendrag, nei.

Legg merke til at minnet er tilordnet Java-apper. er angitt for appen. starter, og er ikke justerbar.

Prov a forkaste deler av koden til en separat trad og kast den nar du ikke trenger den lenger.


Hallo! Vil du spille i det mest heldige kasinoet? Vi samlet det for deg. Klikk her nå!