Zber odpadu Prihlásenie do súboru v Jave
1. Prehľad
Zber odpadu je zázrakom programovacieho jazyka Java, ktorý nám poskytuje automatickú správu pamäte. Zber odpadu skrýva podrobnosti o tom, že je potrebné ručne alokovať a uvoľniť pamäť. Aj keď je tento mechanizmus fantastický, niekedy nefunguje tak, ako by sme chceli. V tomto výučbe sa pozrieme na Java možnosti protokolovania pre štatistiku zberu odpadu a zistiť, ako na to presmerovať tieto štatistiky do súboru.
2. Príznaky protokolovania GC v prostredí Java 8 a starších
Najskôr sa pozrime na príznaky JVM týkajúce sa protokolovania GC vo verziách Java pred verziou Java 9.
2.1. -XX: + PrintGC
The -XX: + PrintGC vlajka je alias pre -verbose: gc a zapne základné protokolovanie GC. V tomto režime je vytlačený jeden riadok pre každú mladú generáciu a každú kolekciu celej generácie. Poďme teraz upriamiť pozornosť na poskytovanie podrobných informácií o GC.
2.2. -XX: + PrintGCDetails
Podobne máme vlajku -XX: + PrintGCDetails zvyknutý aktivovať podrobné protokolovanie GC namiesto -XX: + PrintGC.
Všimnite si, že výstup z -XX: + PrintGCDetails zmeny v závislosti od použitého algoritmu GC.
Ďalej sa pozrieme na anotáciu našich protokolov informáciami o dátume a čase.
2.3. -XX: + PrintGCDateStamps a -XX: + PrintGCTimeStamps
Môžeme pridať do našich denníkov GC dátumy a údaje o čase využitím vlajok -XX: + PrintGCDateStamps a -XX: + PrintGCTimeStamps, resp.
Najprv, -XX: + PrintGCDateStamps na začiatok každého riadku pridá dátum a čas záznamu.
Po druhé, -XX: PrintGCTimeStamps pridáva časovú pečiatku do každého riadku denníka s podrobným údajom o uplynutom čase (v sekundách) od spustenia JVM.
2.4. -Xloggc
Nakoniec prichádzame k presmerovanie protokolu GC do súboru. Tento príznak vezme voliteľný názov súboru ako argument pomocou syntaxe -Xloggc: súbor a bez prítomnosti názvu súboru sa protokol GC zapíše na štandardný výstup.
Tento príznak navyše nastavuje aj -XX: PrintGC a -XX: PrintGCTimestamps vlajky pre nás. Pozrime sa na niekoľko príkladov:
Ak chceme zapísať log GC na štandardný výstup, môžeme spustiť:
java -cp $ CLASSPATH -Xloggc mypackage.MainClass
Alebo aby sme zapísali protokol GC do súboru, spustili by sme:
java -cp $ CLASSPATH -Xloggc: /tmp/gc.log mypackage.MainClass
3. Príznaky protokolovania GC v prostredí Java 9 a novších
V prostredí Java 9+ -XX: PrintGC, alias pre -verbose: gc, bol zastaraný v prospech možnosť zjednoteného protokolovania, -Xlog. Všetky ostatné vyššie uvedené príznaky GC sú stále platné v prostredí Java 9+. Táto nová možnosť protokolovania nám to umožňuje určiť, ktoré správy sa majú zobraziť, nastaviť úroveň protokolu a presmerovať výstup.
Nižšie uvedeným príkazom môžeme zobraziť všetky dostupné možnosti pre úrovne denníka, dekorátory protokolov a sady značiek:
java -Xlog: logovanie = ladenie -verzia
Napríklad, ak by sme chceli prihlásiť všetky správy GC do súboru, spustili by sme:
java -cp $ CLASSPATH -Xlog: gc * = debug: file = / tmp / gc.log mypackage.MainClass
Tento nový príznak zjednoteného protokolovania je navyše opakovateľný, takže môžete napríklad zaznamenajte všetky správy GC do štandardného výstupu a do súboru:
java -cp $ CLASSPATH -Xlog: gc * = debug: stdout -Xlog: gc * = debug: file = / tmp / gc.log mypackage.MainClass
4. Záver
V tomto článku sme si ukázali, ako protokolovať výstup zberu odpadu v prostredí Java 8 aj Java 9+ vrátane toho, ako tento výstup presmerovať do súboru.