Java Heap Space Memory s Runtime API-jem

1. Pregled

U ovom ćemo članku razgovarati o API-ima koje nudi Java koji nam mogu pomoći da razumijemo nekoliko aspekata povezanih s prostorom Java hrpe.

To može biti korisno za razumijevanje trenutnog stanja memorije JVM-a i njegovo prenošenje na nadgledanje usluga kao što su StatsD i Datadog, koje se zatim mogu konfigurirati da preduzimaju preventivne radnje i izbjegavaju kvarove aplikacija.

2. Pristup memorijskim parametrima

Svaka Java aplikacija ima jedan primjerak java.lang.Trajanje koji nam mogu pomoći da razumijemo trenutni status memorije aplikacije. The Runtime # getRuntime statička metoda se može pozvati da se dobije singleton Vrijeme izvođenja primjer.

2.1. Ukupna memorija

The Runtime # getTotalMemory metoda vraća ukupni prostor hrpe koji je trenutno rezervirao JVM u bajtovima. Uključuje memoriju rezerviranu za trenutne i buduće objekte. Stoga nije zajamčeno da će biti konstantan tijekom izvršavanja programa jer se prostor hrpe Java može proširiti ili smanjiti kako se dodjeljuje više objekata.

Također, ova vrijednost nije nužno ono što se koristi ili maksimalno dostupna memorija.

2.2. Slobodno pamćenje

The Runtime # freeMemory metoda vraća slobodan prostor hrpe dostupan za nove dodjele objekata u bajtovima. Može se povećati kao rezultat postupka odvoza smeća gdje je nakon dostupno više slobodne memorije.

2.3. Maksimalna memorija

The Runtime # maxMemory metoda vraća maksimalnu memoriju koju će JVM pokušati upotrijebiti. Jednom kada upotreba JVM memorije dosegne ovu vrijednost, tada neće dodijeliti više memorije, već će skupljati smeće češće.

Ako JVM objektima i dalje treba više memorije čak i nakon pokretanja sakupljača smeća, JVM može baciti a java.lang.OutOfMemoryError runtime iznimka.

3. Primjer

U donjem primjeru inicijaliziramo ArrayList i dodajte mu elemente, prateći prostor JVM hrpe koristeći gornje tri metode:

ArrayList arrayList = novi ArrayList (); System.out.println ("i \ t Slobodna memorija \ t Ukupna memorija \ t Max memorija"); za (int i = 0; i <1000000; i ++) {arrayList.add (i); System.out.println (i + "\ t" + Runtime.getRuntime (). FreeMemory () + "\ t \ t" + Runtime.getRuntime (). TotalMemory () + "\ t \ t" + Runtime.getRuntime () .maxMemory ()); } // ...
Izlaz: ja slobodna memorija Ukupna memorija Max memorija 0 254741016 257425408 3817865216 1 254741016 257425408 3817865216 ... 1498 254741016 257425408 3817865216 1499 253398840 257425408 3817865216 1500 253398840 257425408 3817865216 ... 900079 179608120 260046848 3817865216 900080 302140152 324534272 3817865216 900081 302140152 324534272 3817865216 ...
  • Red 1498: The Runtime # freeMemory vrijednost se smanjuje kada se na Java hrpi dodijeli dovoljno objekata.
  • Red 900080: U ovom trenutku JVM ima više raspoloživog prostora jer je GC pokrenuo otud vrijednosti Runtime # freeMemory i Runtime # totalMemory povećati.

Očekuje se da će gornje vrijednosti biti različite u svakom pokretanju Java aplikacije.

4. Prilagođavanje parametara memorije

Možemo nadjačati zadane vrijednosti za JVM memorijske parametre postavljanjem prilagođenih vrijednosti na određene zastavice prilikom izvođenja našeg Java programa kako bismo postigli potrebne performanse memorije:

  • -Xms: Vrijednost dodijeljena -Xms flag postavlja početnu i minimalnu vrijednost Java gomile. Može se koristiti u slučajevima kada naša aplikacija zahtijeva više memorije od zadane minimalne vrijednosti prilikom pokretanja JVM-a
  • -Xmx: Isto tako, možemo postaviti maksimalnu vrijednost za prostor gomile dodjeljivanjem -Xmx zastava. Može se koristiti kada želimo namjerno ograničiti količinu memorije koju će koristiti naša aplikacija.

Također imajte na umu da -Xms vrijednost mora biti jednaka ili manja od -Xmx vrijednost.

4.1. Upotreba

java -Xms32M -Xmx64M Glavna slobodna memorija: 31792664 bajta Ukupna memorija: 32505856 bajtova Maksimalna memorija: 59768832 bajta java -Xms64M -Xmx64M Glavna slobodna memorija: 63480640 bajtova Ukupna memorija: 64487424 bajta Max memorija: 64487424 bajtova java -Xms64M -Xmx32M tijekom inicijalizacije VM Početna veličina hrpe postavljena na veću vrijednost od maksimalne veličine hrpe

5. Zaključak

U ovom smo članku vidjeli kako dohvatiti mjerne podatke JVM memorije putem Vrijeme izvođenja razred. Te metode mogu biti korisne pri istraživanju curenja JVM memorije i drugih problema vezanih uz performanse JVM memorije.

Pokazali smo i kako dodijeliti prilagođene vrijednosti za određene zastave što dovodi do različitog ponašanja JVM memorije za različite scenarije.


$config[zx-auto] not found$config[zx-overlay] not found