Prijava smeća u datoteku na Javi
1. Pregled
Odvoz smeća čudo je programskog jezika Java koji nam pruža automatsko upravljanje memorijom. Odvoz smeća skriva detalje ručnog raspoređivanja i oslobađanja memorije. Iako je ovaj mehanizam fantastičan, ponekad ne funkcionira onako kako mi želimo. U ovom uputstvu istražit ćemo Java mogućnosti bilježenja statistike odvoza smeća i otkriti kako preusmjerite ove statistike u datoteku.
2. Oznake zapisivanja GC-a u Javi 8 i starijim verzijama
Prvo, istražimo JVM zastavice koje se odnose na bilježenje GC-a u Java verzijama prije Java 9.
2.1. -XX: + IspisGC
The -XX: + IspisGC zastava je alias za -verbozna: gc i uključuje osnovno bilježenje GC-a. U ovom načinu rada ispisuje se jedan redak za svaku mladu generaciju i svaku zbirku cijele generacije. Usmjerimo sada pažnju na pružanje detaljnih GC informacija.
2.2. -XX: + IspisGCDetalji
Slično imamo i zastavu -XX: + IspisGCDetalji naviknut aktivirati detaljno bilježenje GC-a umjesto -XX: + IspisGC.
Imajte na umu da je izlaz iz -XX: + IspisGCDetalji mijenja se ovisno o GC algoritmu koji se koristi.
Dalje ćemo pogledati bilješke naših dnevnika s podacima o datumu i vremenu.
2.3. -XX: + IspisGCDateStamps i -XX: + IspisGCTimeStamps
Možemo dodajte datume i podatke o vremenu u naše GC zapisnike korištenjem zastava -XX: + IspisGCDateStamps i -XX: + IspisGCTimeStamps, odnosno.
Prvi, -XX: + IspisGCDateStamps dodaje datum i vrijeme unosa u zapisnik na početak svakog retka.
Drugi, -XX: PrintGCTimeStamps dodaje vremensku oznaku u svaki redak dnevnika s pojedinostima o vremenu koje je prošlo (u sekundama) od pokretanja JVM-a.
2.4. -Xloggc
Napokon, dolazimo do preusmjeravanje GC dnevnika u datoteku. Ova zastavica uzima neobavezno ime datoteke kao argument koristeći sintaksu -Xloggc: datoteka a bez prisutnosti naziva datoteke, zapisnik GC zapisuje se u standardni out.
Uz to, ova zastava također postavlja -XX: PrintGC i -XX: PrintGCTimestamps zastave za nas. Pogledajmo nekoliko primjera:
Ako želimo zapisati GC zapisnik u standardni izlaz, možemo pokrenuti:
java -cp $ CLASSPATH -Xloggc mypackage.MainClass
Ili da zapišemo GC zapisnik u datoteku, pokrenuli bismo:
java -cp $ CLASSPATH -Xloggc: /tmp/gc.log mypackage.MainClass
3. GC zapisivanje zastavica u Javi 9 i novijim
U Javi 9+, -XX: PrintGC, alias za -verbozna: gc, zastario je u korist mogućnost objedinjene prijave, -Xlog. Sve ostale gore spomenute GC zastave i dalje vrijede u Javi 9+. Ova nova mogućnost bilježenja omogućuje nam odredite koje poruke treba prikazati, postavite razinu dnevnika i preusmjerite izlaz.
Možemo pokrenuti donju naredbu kako bismo vidjeli sve dostupne opcije za razine dnevnika, dekoratere dnevnika i skupove oznaka:
java -Xlog: zapisivanje = ispravljanje pogrešaka -verzija
Na primjer, ako bismo željeli prijaviti sve GC poruke u datoteku, pokrenuli bismo:
java -cp $ CLASSPATH -Xlog: gc * = otklanjanje pogrešaka: datoteka = / tmp / gc.log mypackage.MainClass
Uz to, ova nova objedinjena zastava za bilježenje je ponovljiva, tako da možete, na primjer, prijavite sve GC poruke u standardni out i u datoteku:
java -cp $ CLASSPATH -Xlog: gc * = otklanjanje pogrešaka: stdout -Xlog: gc * = otklanjanje pogrešaka: datoteka = / tmp / gc.log mypackage.MainClass
4. Zaključak
U ovom smo članku pokazali kako bilježiti izlaz sakupljanja smeća i u Java 8 i u Java 9+, uključujući kako preusmjeriti taj izlaz u datoteku.