Эта статья в основном изучает понимание журналов GC в виртуальных машинах Java, следующим образом.
Понимание журналов GC является основным навыком в решении проблем с памятью о виртуальной машине Java.
Добавив параметры в тип команды Java, укажите соответствующий тип GC, распечатайте информацию о журнале GC и выведите его в файлы и другие политики.
Общедоступный класс SERECHECOUNTYNTINGGC {Public Object Extance = NULL; Private Static Final int One_mb = 1024 * 1024; Private Byte [] bigsize = new Byte [2 * one_mb]; public static void main (string [] args) {testgc ();} public void testgc () {Ссылка Ссылкак.Javac ReferenceCountinggc.java
java -xx:+printgcdatestamps -xx:+printgcdetails servicecountinggc
Соответствующий список параметров
-Xx:+printgc output gc log
-Xx:+printgcdetails Выходы подробные журналы GC
-Xx:+printgctimestamps timestamp
-Xx:+printgcdatestAmps вывода TimeStamp (в форме даты, такой как 2013-05-04T21: 53: 59.234+0800)
-Xx:+printheapatgc распечатайте информацию о куче до и после GC
-Xloggc: ../ logs/gc.log выходной путь файла журнала
Результаты вывод:
2016-03-20T14: 34: 55.118-0800: [GC [Psyounggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 с] [время: пользователь = 0,00 SYS = 0,00, реальность = 0,00 секунды]]
2016-03-20T14: 34: 55.119-0800: [Полный GC [Psyounggen: 400K-> 0K (38912K)] [Переолдген: 0K-> 282K (87040K)] 400K-> 282K (125952K) [PSPERMGEN: 2622K-> 2621K (21504K)], 2621K), 21504K), 262K (21504K)], 2621K (21504K)], 2621K (21504K), 262K (12595K) [PSPERMGEN: 262K-> 2621K (21504K)], 2621K (125952K) [PSPERMGEN: 262K-> 2621K (125952K). Secs] [Время: пользователь = 0,01 SYS = 0,00, реально = 0,01 секунды]
Куча
Psyounggen Всего 38912K, используется 1013K [0x00000007d555000000, 0x00000007d80000000, 0x000000008000000000)
Eden Space 33792K, 3% используется [0x00000007d5500000, 0x00000007d55fd7d0, 0x00000007d76000000)
От пространства 5120K, 0% используется [0x00000007d7600000, 0x00000007d7600000, 0x00000007d7b000000)
до места 5120K, 0% использовалось [0x00000007D7B00000, 0x00000007D7B00000, 0x00000007D80000000)
Paroldgen Всего 87040K, использован 282K [0x0000000780000000, 0x000000078555000000, 0x00000007D55000000)
Пространство объекта 87040K, 0% используется [0x0000000780000000, 0x0000000780046BF8, 0x000000078555000000)
PSPERMGEN Всего 21504K, использовалось 2628K [0x00000000777A000000, 0x000000077C3000000, 0x00000007800000000)
Пространство объекта 21504K, 12% используется [0x000000077ae00000000.0x00000077B091380,0x00000077C3000000)
Psyounggen означает новое поколение, и это имя определяется коллекционером, который является параллельным поглощением. Переролд, постоянно Пспермген
Вы можете видеть, что есть два типа GC: GC и Full GC. Существует полное заявление, что на этот раз с GC произошел с GC.
Клан GC (несовершеннолетний GC): относится к действию по сбору мусора, которое происходит в клане. Поскольку большинство объектов Java имеют характеристики жизни и смерти, незначительный GC очень част, и, как правило, скорость утилизации очень быстрая.
Старый GC (основной GC/Full GC): относится к GC, который происходит в старости. Появляется крупный GC, который часто сопровождается незначительным GC, по крайней мере, один раз. Скорость крупного GC, как правило, более чем в 10 раз медленнее, чем незначительный GC.
[GC [PSYOUNGGEN: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 с] [Время: пользователь = 0,00 SYS = 0,00, Реал = 0,00 секунды]
6123K-> 400K (38912K) внутри квадратного кронштейна выше указывает на то, что область памяти использовала емкость перед GC -> GC после GC, а 38912K внутри круглого кронштейна позади -это общая емкость области памяти.
6123K-> 400K (125952K) за пределами квадратных кронштейнов означает, что куча Java использовала емкость, прежде чем GC -> Java Heap использовала емкость после GC, а 125952k внутри круглых скобок позади -это общая вместимость кучи Java.
[Время: пользователь = 0,00 SYS = 0,00, реальные = 0,00 с] соответственно представляют ЦП, потребляемое пользователем, процессором, потребляемом состоянием ядра, и время настенных часов истекло от начала до конца операции. Разница между временем процессора и временем настенных часов состоит в том, что время настенных часов включает в себя различное время ожидания не операции, например, ожидание дискового ввода-вывода и ожидание блокировки потока, в то время как время процессора не включает в себя это время.
Вы можете использовать некоторые автономные инструменты для анализа журналов GC, таких как Sun's Gchisto (https://java.net/projects/gchisto) и Gcviewer (https://github.com/chewiebug/gcviewer). Это все инструменты с открытым исходным кодом. Пользователи могут напрямую загружать свой исходный код с помощью инструментов управления версиями для автономного анализа.
Выше всего посвящено анализу журнала GC виртуальной машины Java, и я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!