Søppelinnsamling Logger på en fil i Java

1. Oversikt

Søppelinnsamling er et under av Java-programmeringsspråket som gir oss automatisk minnestyring. Søppeloppsamling skjuler detaljene ved å måtte tildele og omfordele minne manuelt. Selv om denne mekanismen er fantastisk, fungerer den noen ganger ikke slik vi vil. I denne opplæringen vil vi utforske Java loggingsalternativer for statistikk for søppelinnsamling og oppdag hvordan omdirigere denne statistikken til en fil.

2. GC-loggingsflagg i Java 8 og tidligere

La oss først utforske JVM-flaggene knyttet til GC-logging i Java-versjoner før Java 9.

2.1. -XX: + PrintGC

De -XX: + PrintGC flagg er et alias for -verbose: gc og slår på grunnleggende GC-logging. I denne modusen skrives det ut en enkelt linje for hver ung generasjon og hver fullgenerasjonssamling. La oss nå rette oppmerksomheten mot å gi detaljert GC-informasjon.

2.2. -XX: + PrintGCDetails

Tilsvarende har vi flagget -XX: + PrintGCDetails pleide å aktiver detaljert GC-logging i stedet for -XX: + PrintGC.

Merk at utgangen fra -XX: + PrintGCDetails endres avhengig av GC-algoritmen som er i bruk.

Deretter ser vi på å kommentere loggene våre med informasjon om dato og klokkeslett.

2.3. -XX: + PrintGCDateStamps og -XX: + PrintGCTimeStamps

Vi kan legg til datoer og tidsinformasjon i GC-loggene våre ved å bruke flaggene -XX: + PrintGCDateStamps og -XX: + PrintGCTimeStamps, henholdsvis.

Først, -XX: + PrintGCDateStamps legger til dato og klokkeslett for loggoppføringen i begynnelsen av hver linje.

Sekund, -XX: PrintGCTimeStamps legger til et tidsstempel for hver linje i loggen som beskriver tiden som gikk (i sekunder) siden JVM ble startet.

2.4. -Xloggc

Endelig kommer vi til omdirigere GC-loggen til en fil. Dette flagget tar et valgfritt filnavn som et argument ved hjelp av syntaksen -Xloggc: fil og uten tilstedeværelse av et filnavn blir GC-loggen skrevet ut.

I tillegg setter dette flagget også -XX: PrintGC og -XX: PrintGCTimestamps flagg for oss. La oss se på noen eksempler:

Hvis vi vil skrive GC-loggen til standardutdata, kan vi kjøre:

java -cp $ CLASSPATH -Xloggc mypackage.MainClass

Eller for å skrive GC-loggen til en fil, vil vi kjøre:

java -cp $ CLASSPATH -Xloggc: /tmp/gc.log mypackage.MainClass

3. GC-loggflagg i Java 9 og senere

I Java 9+, -XX: PrintGC, aliaset for -verbose: gc, er avskrevet til fordel for enhetlig loggingsalternativ, -Xlog. Alle andre GC-flagg nevnt ovenfor er fortsatt gyldige i Java 9+. Dette nye loggingsalternativet lar oss angi hvilke meldinger som skal vises, angi loggnivå og omdirigere utdata.

Vi kan kjøre kommandoen nedenfor for å se alle tilgjengelige alternativer for loggnivåer, loggdekoratorer og kodesett:

java -Xlog: logging = feilsøkingsversjon 

Hvis vi for eksempel vil logge alle GC-meldinger til en fil, vil vi kjøre:

java -cp $ CLASSPATH -Xlog: gc * = feilsøking: fil = / tmp / gc.log mypackage.MainClass

I tillegg kan dette nye enhetlige loggflagget repeteres, slik at du for eksempel kan logg alle GC-meldinger til både standard ut og en fil:

java -cp $ CLASSPATH -Xlog: gc * = feilsøking: stdout -Xlog: gc * = feilsøking: fil = / tmp / gc.log mypackage.MainClass

4. Konklusjon

I denne artikkelen har vi vist hvordan du logger ut søppeloppsamling i både Java 8 og Java 9+, inkludert hvordan du omdirigerer utdataene til en fil.


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