Перейти к основному содержимому

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

· 3 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

Сборка мусора — это чудо языка программирования Java, предоставляющее нам автоматическое управление памятью. Сборка мусора скрывает детали необходимости ручного выделения и освобождения памяти. Хотя этот механизм является фантастическим, иногда он работает не так, как нам хотелось бы. В этом руководстве мы рассмотрим параметры ведения журнала Java для статистики сборки мусора и узнаем, как перенаправить эту статистику в файл .

2. Флаги ведения журнала сборщика мусора в Java 8 и более ранних версиях

Во-первых, давайте рассмотрим флаги JVM, связанные с ведением журнала GC в версиях Java до Java 9.

2.1. -XX:+ПечатьГК

Флаг -XX:+PrintGC является псевдонимом для -verbose:gc и включает базовое ведение журнала сборщика мусора . В этом режиме для каждой коллекции молодого поколения и каждой коллекции полного поколения печатается одна строка. Давайте теперь обратим наше внимание на предоставление подробной информации GC.

2.2. -XX:+ПечатьGCDetails

Точно так же у нас есть флаг -XX:+PrintGCDetails, используемый для активации подробного ведения журнала GC вместо -XX:+PrintGC .

Обратите внимание, что выходные данные команды -XX:+PrintGCDetails меняются в зависимости от используемого алгоритма сборки мусора.

Далее мы рассмотрим аннотирование наших журналов информацией о дате и времени.

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

Мы можем добавить информацию о датах и времени в наши журналы GC , используя флаги -XX:+PrintGCDateStamps и -XX:+PrintGCTimeStamps соответственно.

Во- первых, -XX:+PrintGCDateStamps добавляет дату и время записи журнала в начало каждой строки.

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

2.4. -Xloggc

Наконец, мы подошли к перенаправлению журнала GC в файл . Этот флаг принимает необязательное имя файла в качестве аргумента с использованием синтаксиса -Xloggc:file, и без наличия имени файла журнал GC записывается в стандартный вывод.

Кроме того, этот флаг также устанавливает для нас флаги -XX:PrintGC и -XX:PrintGCTimestamps . Давайте рассмотрим несколько примеров:

Если мы хотим записать журнал GC в стандартный вывод, мы можем запустить:

java -cp $CLASSPATH -Xloggc mypackage.MainClass

Или, чтобы записать журнал сборщика мусора в файл, мы запустим:

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

3. Флаги ведения журнала сборщика мусора в 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+, в том числе как перенаправить эти выходные данные в файл.