Регистрация на събиране на боклук във файл в Java

1. Общ преглед

Събирането на боклук е чудо на езика за програмиране Java, който ни осигурява автоматично управление на паметта. Събирането на боклук крие подробностите за ръчното разпределение и освобождаване на паметта. Въпреки че този механизъм е фантастичен, понякога не работи по начина, по който искаме. В този урок ще проучим опциите за регистриране на Java за статистика за събиране на боклука и ще открием как да ги пренасочим към файл .

2. GC Регистрационни знамена в Java 8 и по-ранни версии

Първо, нека изследваме флаговете на JVM, свързани с регистрирането на GC във версии на Java преди Java 9.

2.1. -XX: + PrintGC

В -XX: + PrintGC флаг е псевдоним на -verbose: GC и завои на основния GC сеч . В този режим се отпечатва един ред за всяко младо поколение и всяка колекция от пълно поколение. Нека сега насочим вниманието си към предоставяне на подробна информация за GC.

2.2. -XX: + PrintGCDetails

По същия начин имаме знамето -XX: + PrintGCDetails, използвано за активиране на подробно регистриране в GC вместо -XX: + PrintGC .

Обърнете внимание, че изходът от -XX: + PrintGCDetails се променя в зависимост от използвания GC алгоритъм.

След това ще разгледаме анотирането на дневниците ни с информация за дата и час.

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

Можем да добавяме информация за дати и време към нашите GC регистрационни файлове, като използваме съответно флаговете -XX: + PrintGCDateStamps и -XX: + PrintGCTimeStamps .

Първо, -XX: + PrintGCDateStamps добавя датата и часа на записа в дневника в началото на всеки ред.

Второ, -XX: PrintGCTimeStamps добавя клеймо за време към всеки ред от дневника с подробности за времето, изминало (в секунди) от стартирането на JVM.

2.4. -Xloggc

Накрая стигнахме до пренасочване на GC регистрационния файл към файл . Този флаг приема незадължително име на файл като аргумент, използвайки синтаксиса -Xloggc: файл и без наличието на име на файл, GC дневникът се записва в стандартен изход.

Освен това този флаг също така задава за нас флаговете -XX: PrintGC и -XX: PrintGCTimestamps . Нека разгледаме няколко примера:

Ако искаме да запишем GC дневника в стандартен изход, можем да изпълним:

java -cp $CLASSPATH -Xloggc mypackage.MainClass

Или за да запишем GC регистрационния файл във файл, ще стартираме:

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

3. GC Регистрационни знамена в Java 9 и по-нови версии

В Java 9+, -XX: PrintGC , псевдонимът на -verbose: gc е остарял в полза на унифицираната опция за регистриране, -Xlog . Всички други GC флагове, споменати по-горе, все още са валидни в Java 9+. Тази нова опция за регистриране ни позволява да посочим кои съобщения да се показват, да зададем ниво на регистрация и да пренасочим изхода .

Можем да изпълним командата по-долу, за да видим всички налични опции за нива на журнали, декоратори на журнали и набори от маркери:

java -Xlog:logging=debug -version 

Например, ако искахме да регистрираме всички GC съобщения във файл, ще стартираме:

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

Освен това този нов унифициран флаг за регистриране е повторяем, така че можете например да регистрирате всички GC съобщения както в стандартен изход, така и във файл :

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

4. Заключение

В тази статия показахме как да регистрираме изхода за събиране на боклука както в Java 8, така и в Java 9+, включително как да пренасочим този изход към файл.