Affaldssamling Logning til en fil i Java

1. Oversigt

Affaldssamling er et vidunder af Java-programmeringssproget, der giver os automatisk hukommelsesstyring. Affaldssamling skjuler detaljerne i at skulle manuelt allokere og deallokere hukommelse. Selvom denne mekanisme er fantastisk, fungerer den nogle gange ikke som vi vil. I denne vejledning undersøger vi Java'er logningsmuligheder for skraldindsamlingsstatistikker og find ud af, hvordan man gør det omdirigere disse statistikker til en fil.

2. GC-logflag i Java 8 og tidligere

Lad os først undersøge JVM-flagene vedrørende GC-logning i Java-versioner før Java 9.

2.1. -XX: + PrintGC

Det -XX: + PrintGC flag er et alias for -verbose: gc og aktiverer grundlæggende GC-logning. I denne tilstand udskrives en enkelt linje for hver ung generation og hver fuldgenerationssamling. Lad os nu rette vores opmærksomhed mod at give detaljerede GC-oplysninger.

2.2. -XX: + PrintGCDetails

På samme måde har vi flaget -XX: + PrintGCDetails plejede aktivere detaljeret GC-logning i stedet for -XX: + PrintGC.

Bemærk, at output fra -XX: + PrintGCDetails ændringer afhængigt af GC-algoritmen, der er i brug.

Dernæst ser vi på at kommentere vores logfiler med dato og klokkeslæt.

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

Vi kan tilføj datoer og tidsoplysninger til vores GC-logfiler ved at bruge flagene -XX: + PrintGCDateStamps og -XX: + PrintGCTimeStamps, henholdsvis.

Først, -XX: + PrintGCDateStamps tilføjer datoen og klokkeslættet for logposten til begyndelsen af ​​hver linje.

Sekund, -XX: PrintGCTimeStamps tilføjer et tidsstempel til hver linje i loggen, der beskriver den tid, der er gået (i sekunder), siden JVM blev startet.

2.4. -Xloggc

Endelig kommer vi til omdirigere GC-loggen til en fil. Dette flag tager et valgfrit filnavn som et argument ved hjælp af syntaksen -Xloggc: fil og uden tilstedeværelsen af ​​et filnavn skrives GC-loggen til standard ud.

Derudover indstiller dette flag også -XX: PrintGC og -XX: PrintGCTimestamps flag for os. Lad os se på nogle eksempler:

Hvis vi vil skrive GC-loggen til standardoutput, kan vi køre:

java -cp $ CLASSPATH -Xloggc mypackage.MainClass

Eller for at skrive GC-loggen til en fil, kører vi:

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

3. GC-logflag i Java 9 og nyere

I Java 9+, -XX: PrintGC, aliaset for -verbose: gc, er udfaset til fordel for samlet logning mulighed -Xlog. Alle andre GC-flag nævnt ovenfor er stadig gyldige i Java 9+. Denne nye logningsindstilling giver os mulighed for at angiv hvilke meddelelser der skal vises, indstil logniveauet og omdiriger output.

Vi kan køre kommandoen nedenfor for at se alle de tilgængelige muligheder for logniveauer, logdekoratorer og tag-sæt:

java -Xlog: logning = debug -version 

Hvis vi f.eks. Vil logge alle GC-meddelelser til en fil, kører vi:

java -cp $ CLASSPATH -Xlog: gc * = debug: file = / tmp / gc.log mypackage.MainClass

Derudover kan dette nye samlede logflag gentages, så du f.eks. log alle GC-meddelelser til både standard ud og en fil:

java -cp $ CLASSPATH -Xlog: gc * = debug: stdout -Xlog: gc * = debug: file = / tmp / gc.log mypackage.MainClass

4. Konklusion

I denne artikel har vi vist, hvordan man logger affaldsindsamlingsoutput i både Java 8 og Java 9+, herunder hvordan man omdirigerer dette output til en fil.