blob: 8e665f695f0f016de4ecff8b64f4eb8ea2a748da [file] [log] [blame]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Eclipse OpenJ9 documentation">
<link rel="canonical" href="https://www.eclipse.org/openj9/docs/vgclog_examples/">
<link rel="shortcut icon" href="../cr/openj9-logo.svg">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.3">
<title>Log examples - </title>
<link rel="stylesheet" href="../assets/stylesheets/main.1655a90d.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.7fa14f5b.min.css">
<meta name="theme-color" content="#009485">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
<link rel="stylesheet" href="../stylesheets/oj9.css">
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="cyan">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#log-examples" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://www.eclipse.org/openj9/docs" title=" " class="md-header__button md-logo" aria-label=" ">
<img src="../cr/openj9_6b.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Log examples
</span>
</div>
</div>
</div>
<div class="md-header__options">
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/eclipse/openj9" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</div>
<div class="md-source__repository">
eclipse/openj9
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://www.eclipse.org/openj9/docs" title=" " class="md-nav__button md-logo" aria-label=" ">
<img src="../cr/openj9_6b.png" alt="logo">
</a>
</label>
<div class="md-nav__source">
<a href="https://github.com/eclipse/openj9" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</div>
<div class="md-source__repository">
eclipse/openj9
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
About the docs
</a>
</li>
<li class="md-nav__item">
<a href="../builds/" class="md-nav__link">
OpenJ9 builds
</a>
</li>
<li class="md-nav__item">
<a href="../introduction/" class="md-nav__link">
Getting started
</a>
</li>
<li class="md-nav__item">
<a href="../openj9_newuser/" class="md-nav__link">
New to OpenJ9?
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5">
Release notes
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Release notes" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Release notes
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../openj9_releases/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../version0.26/" class="md-nav__link">
Version 0.26.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.25/" class="md-nav__link">
Version 0.25.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.24/" class="md-nav__link">
Version 0.24.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.23/" class="md-nav__link">
Version 0.23.0
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_6" type="checkbox" id="__nav_5_6" >
<label class="md-nav__link" for="__nav_5_6">
Earlier releases
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Earlier releases" data-md-level="2">
<label class="md-nav__title" for="__nav_5_6">
<span class="md-nav__icon md-icon"></span>
Earlier releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../version0.22/" class="md-nav__link">
Version 0.22.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.21/" class="md-nav__link">
Version 0.21.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.20/" class="md-nav__link">
Version 0.20.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.19/" class="md-nav__link">
Version 0.19.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.18/" class="md-nav__link">
Version 0.18.1
</a>
</li>
<li class="md-nav__item">
<a href="../version0.17/" class="md-nav__link">
Version 0.17.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.16/" class="md-nav__link">
Version 0.16.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.15/" class="md-nav__link">
Version 0.15.1
</a>
</li>
<li class="md-nav__item">
<a href="../version0.14/" class="md-nav__link">
Version 0.14.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.13/" class="md-nav__link">
Version 0.13.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.12/" class="md-nav__link">
Version 0.12.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.11/" class="md-nav__link">
Version 0.11.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.10/" class="md-nav__link">
Version 0.10.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.9/" class="md-nav__link">
Version 0.9.0
</a>
</li>
<li class="md-nav__item">
<a href="../version0.8/" class="md-nav__link">
Version 0.8.0
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../configuring/" class="md-nav__link">
Configuring your system
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" checked>
<label class="md-nav__link" for="__nav_7">
Memory management
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Memory management" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Memory management
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../allocation/" class="md-nav__link">
Heap allocation
</a>
</li>
<li class="md-nav__item">
<a href="../gc_overview/" class="md-nav__link">
Garbage Collection (GC)
</a>
</li>
<li class="md-nav__item">
<a href="../gc/" class="md-nav__link">
GC policies
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_4" type="checkbox" id="__nav_7_4" checked>
<label class="md-nav__link" for="__nav_7_4">
Troubleshooting GC
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Troubleshooting GC" data-md-level="2">
<label class="md-nav__title" for="__nav_7_4">
<span class="md-nav__icon md-icon"></span>
Troubleshooting GC
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../vgclog/" class="md-nav__link">
Verbose GC logs
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Log examples
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Log examples
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page...">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page...
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#gencon-examples" class="md-nav__link">
gencon examples
</a>
<nav class="md-nav" aria-label="gencon examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#scavenge-partial-gc-cycle" class="md-nav__link">
Scavenge partial GC cycle
</a>
<nav class="md-nav" aria-label="Scavenge partial GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#concurrent-scavenge-partial-gc-cycle-non-default" class="md-nav__link">
Concurrent scavenge partial GC cycle (non-default)
</a>
</li>
<li class="md-nav__item">
<a href="#gencon-global-gc-cycle" class="md-nav__link">
gencon global GC cycle
</a>
<nav class="md-nav" aria-label="gencon global GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary_1" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#balanced-examples" class="md-nav__link">
balanced examples
</a>
<nav class="md-nav" aria-label="balanced examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#balanced-partial-gc-cycle" class="md-nav__link">
balanced partial GC cycle
</a>
<nav class="md-nav" aria-label="balanced partial GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary_2" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#balanced-global-mark-gc-cycle" class="md-nav__link">
balanced global mark GC cycle
</a>
<nav class="md-nav" aria-label="balanced global mark GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#global-mark-phase" class="md-nav__link">
Global mark phase
</a>
</li>
<li class="md-nav__item">
<a href="#sweep-phase" class="md-nav__link">
Sweep phase
</a>
</li>
<li class="md-nav__item">
<a href="#summary_3" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#balanced-global-gc-cycle" class="md-nav__link">
balanced global GC cycle
</a>
<nav class="md-nav" aria-label="balanced global GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary_4" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../jit/" class="md-nav__link">
JIT Compiler
</a>
</li>
<li class="md-nav__item">
<a href="../jitserver/" class="md-nav__link">
JITServer (tech. preview)
</a>
</li>
<li class="md-nav__item">
<a href="../aot/" class="md-nav__link">
AOT Compiler
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_11" type="checkbox" id="__nav_11" >
<label class="md-nav__link" for="__nav_11">
Class data sharing
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Class data sharing" data-md-level="1">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
Class data sharing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../shrc/" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item">
<a href="../shrc_diag_util/" class="md-nav__link">
Diagnostic cache utilities
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../attachapi/" class="md-nav__link">
Java Attach API
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_13" type="checkbox" id="__nav_13" >
<label class="md-nav__link" for="__nav_13">
Diagnostics
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Diagnostics" data-md-level="1">
<label class="md-nav__title" for="__nav_13">
<span class="md-nav__icon md-icon"></span>
Diagnostics
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../diag_overview/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_13_2" type="checkbox" id="__nav_13_2" >
<label class="md-nav__link" for="__nav_13_2">
Dumps
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Dumps" data-md-level="2">
<label class="md-nav__title" for="__nav_13_2">
<span class="md-nav__icon md-icon"></span>
Dumps
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dump_javadump/" class="md-nav__link">
Java dump
</a>
</li>
<li class="md-nav__item">
<a href="../dump_heapdump/" class="md-nav__link">
Heap dump
</a>
</li>
<li class="md-nav__item">
<a href="../dump_systemdump/" class="md-nav__link">
System dump
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_13_3" type="checkbox" id="__nav_13_3" >
<label class="md-nav__link" for="__nav_13_3">
Tools
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Tools" data-md-level="2">
<label class="md-nav__title" for="__nav_13_3">
<span class="md-nav__icon md-icon"></span>
Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../tool_jextract/" class="md-nav__link">
Dump extractor
</a>
</li>
<li class="md-nav__item">
<a href="../tool_jdmpview/" class="md-nav__link">
Dump viewer
</a>
</li>
<li class="md-nav__item">
<a href="../tool_traceformat/" class="md-nav__link">
Trace formatter
</a>
</li>
<li class="md-nav__item">
<a href="../tool_builder/" class="md-nav__link">
Option builder
</a>
</li>
<li class="md-nav__item">
<a href="../tool_jcmd/" class="md-nav__link">
Java command (jcmd) tool
</a>
</li>
<li class="md-nav__item">
<a href="../tool_jmap/" class="md-nav__link">
Java memory map (jmap) tool
</a>
</li>
<li class="md-nav__item">
<a href="../tool_jps/" class="md-nav__link">
Java process status (jps)
</a>
</li>
<li class="md-nav__item">
<a href="../tool_jstack/" class="md-nav__link">
Java stack (jstack) tool
</a>
</li>
<li class="md-nav__item">
<a href="../tool_jstat/" class="md-nav__link">
Java statistics monitoring (jstat) tool
</a>
</li>
<li class="md-nav__item">
<a href="../tool_migration/" class="md-nav__link">
Switching to OpenJ9
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_13_4" type="checkbox" id="__nav_13_4" >
<label class="md-nav__link" for="__nav_13_4">
Interfaces
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Interfaces" data-md-level="2">
<label class="md-nav__title" for="__nav_13_4">
<span class="md-nav__icon md-icon"></span>
Interfaces
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../interface_jvmti/" class="md-nav__link">
JVMTI
</a>
</li>
<li class="md-nav__item">
<a href="../interface_dtfj/" class="md-nav__link">
DTFJ
</a>
</li>
<li class="md-nav__item">
<a href="../interface_lang_management/" class="md-nav__link">
Language Management
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_14" type="checkbox" id="__nav_14" >
<label class="md-nav__link" for="__nav_14">
Command-line options
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Command-line options" data-md-level="1">
<label class="md-nav__title" for="__nav_14">
<span class="md-nav__icon md-icon"></span>
Command-line options
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cmdline_specifying/" class="md-nav__link">
Specifying options
</a>
</li>
<li class="md-nav__item">
<a href="../cmdline_general/" class="md-nav__link">
Standard options
</a>
</li>
<li class="md-nav__item">
<a href="../cmdline_migration/" class="md-nav__link">
Switching to OpenJ9
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_14_4" type="checkbox" id="__nav_14_4" >
<label class="md-nav__link" for="__nav_14_4">
System property options
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="System property options" data-md-level="2">
<label class="md-nav__title" for="__nav_14_4">
<span class="md-nav__icon md-icon"></span>
System property options
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../d_jvm_commands/" class="md-nav__link">
Using System properties
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmenableclasscaching/" class="md-nav__link">
-Dcom.ibm.enableClassCaching
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmenablelegacydumpsecurity/" class="md-nav__link">
-Dcom.ibm.enableLegacyDumpSecurity
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmenablelegacylogsecurity/" class="md-nav__link">
-Dcom.ibm.enableLegacyLogSecurity
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmenablelegacytracesecurity/" class="md-nav__link">
-Dcom.ibm.enableLegacyTraceSecurity
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmgpudisable/" class="md-nav__link">
-Dcom.ibm.gpu.disable
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmgpuenable/" class="md-nav__link">
-Dcom.ibm.gpu.enable
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmgpuverbose/" class="md-nav__link">
-Dcom.ibm.gpu.verbose
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmlangmanagementosmxbeaniscputime100ns/" class="md-nav__link">
-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmlangmanagementverbose/" class="md-nav__link">
-Dcom.ibm.lang.management.verbose
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmotisharedsharedclassglobalfilterclass/" class="md-nav__link">
-Dcom.ibm.oti.shared.SharedClassGlobalFilterClass
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachcommand_timeout/" class="md-nav__link">
-Dcom.ibm.tools.attach.command_timeout
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachdirectory/" class="md-nav__link">
-Dcom.ibm.tools.attach.directory
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachdisplayname/" class="md-nav__link">
-Dcom.ibm.tools.attach.displayName
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachenable/" class="md-nav__link">
-Dcom.ibm.tools.attach.enable
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachid/" class="md-nav__link">
-Dcom.ibm.tools.attach.id
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachlogging/" class="md-nav__link">
-Dcom.ibm.tools.attach.logging
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachlogname/" class="md-nav__link">
-Dcom.ibm.tools.attach.log.name
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachshutdown_timeout/" class="md-nav__link">
-Dcom.ibm.tools.attach.shutdown_timeout
</a>
</li>
<li class="md-nav__item">
<a href="../dcomibmtoolsattachtimeout/" class="md-nav__link">
-Dcom.ibm.tools.attach.timeout
</a>
</li>
<li class="md-nav__item">
<a href="../dfileencoding/" class="md-nav__link">
-Dfile.encoding
</a>
</li>
<li class="md-nav__item">
<a href="../djavacompiler/" class="md-nav__link">
-Djava.compiler
</a>
</li>
<li class="md-nav__item">
<a href="../djavalangstringsubstringnocopy/" class="md-nav__link">
-Djava.lang.string.substring.nocopy
</a>
</li>
<li class="md-nav__item">
<a href="../djavalangstringbuffergrowaggressively/" class="md-nav__link">
-Djava.lang.stringBuffer.growAggressively
</a>
</li>
<li class="md-nav__item">
<a href="../djdknativecbc/" class="md-nav__link">
-Djdk.nativeCBC
</a>
</li>
<li class="md-nav__item">
<a href="../djdknativechacha20/" class="md-nav__link">
-Djdk.nativeChaCha20
</a>
</li>
<li class="md-nav__item">
<a href="../djdknativecrypto/" class="md-nav__link">
-Djdk.nativeCrypto
</a>
</li>
<li class="md-nav__item">
<a href="../djdknativedigest/" class="md-nav__link">
-Djdk.nativeDigest
</a>
</li>
<li class="md-nav__item">
<a href="../djdknativegcm/" class="md-nav__link">
-Djdk.nativeGCM
</a>
</li>
<li class="md-nav__item">
<a href="../djdknativersa/" class="md-nav__link">
-Djdk.nativeRSA
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_14_5" type="checkbox" id="__nav_14_5" >
<label class="md-nav__link" for="__nav_14_5">
JVM -X options
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="JVM -X options" data-md-level="2">
<label class="md-nav__title" for="__nav_14_5">
<span class="md-nav__icon md-icon"></span>
JVM -X options
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../x_jvm_commands/" class="md-nav__link">
Using -X options
</a>
</li>
<li class="md-nav__item">
<a href="../x/" class="md-nav__link">
-X
</a>
</li>
<li class="md-nav__item">
<a href="../xaggressive/" class="md-nav__link">
-Xaggressive
</a>
</li>
<li class="md-nav__item">
<a href="../xalwaysclassgc/" class="md-nav__link">
-Xalwaysclassgc
</a>
</li>
<li class="md-nav__item">
<a href="../xaot/" class="md-nav__link">
-Xaot
</a>
</li>
<li class="md-nav__item">
<a href="../xargencoding/" class="md-nav__link">
-Xargencoding
</a>
</li>
<li class="md-nav__item">
<a href="../xbootclasspath/" class="md-nav__link">
-Xbootclasspath
</a>
</li>
<li class="md-nav__item">
<a href="../xceehdlr/" class="md-nav__link">
-XCEEHDLR
</a>
</li>
<li class="md-nav__item">
<a href="../xcheck/" class="md-nav__link">
-Xcheck
</a>
</li>
<li class="md-nav__item">
<a href="../xclassgc/" class="md-nav__link">
-Xclassgc
</a>
</li>
<li class="md-nav__item">
<a href="../xcodecache/" class="md-nav__link">
-Xcodecache
</a>
</li>
<li class="md-nav__item">
<a href="../xcodecachetotal/" class="md-nav__link">
-Xcodecachetotal
</a>
</li>
<li class="md-nav__item">
<a href="../xcomp/" class="md-nav__link">
-Xcomp
</a>
</li>
<li class="md-nav__item">
<a href="../xcompactexplicitgc/" class="md-nav__link">
-Xcompactexplicitgc
</a>
</li>
<li class="md-nav__item">
<a href="../xcompactgc/" class="md-nav__link">
-Xcompactgc
</a>
</li>
<li class="md-nav__item">
<a href="../xcompilationthreads/" class="md-nav__link">
-XcompilationThreads
</a>
</li>
<li class="md-nav__item">
<a href="../xcompressedrefs/" class="md-nav__link">
-Xcompressedrefs
</a>
</li>
<li class="md-nav__item">
<a href="../xconcurrentbackground/" class="md-nav__link">
-Xconcurrentbackground
</a>
</li>
<li class="md-nav__item">
<a href="../xconcurrentlevel/" class="md-nav__link">
-Xconcurrentlevel
</a>
</li>
<li class="md-nav__item">
<a href="../xconcurrentslack/" class="md-nav__link">
-Xconcurrentslack
</a>
</li>
<li class="md-nav__item">
<a href="../xconmeter/" class="md-nav__link">
-Xconmeter
</a>
</li>
<li class="md-nav__item">
<a href="../xenableexcessivegc/" class="md-nav__link">
-Xdisableexcessivegc
</a>
</li>
<li class="md-nav__item">
<a href="../xenableexplicitgc/" class="md-nav__link">
-Xdisableexplicitgc
</a>
</li>
<li class="md-nav__item">
<a href="../xdisablejavadump/" class="md-nav__link">
-Xdisablejavadump
</a>
</li>
<li class="md-nav__item">
<a href="../xenablestringconstantgc/" class="md-nav__link">
-Xdisablestringconstantgc
</a>
</li>
<li class="md-nav__item">
<a href="../xdump/" class="md-nav__link">
-Xdump
</a>
</li>
<li class="md-nav__item">
<a href="../xenableexcessivegc/" class="md-nav__link">
-Xenableexcessivegc
</a>
</li>
<li class="md-nav__item">
<a href="../xenableexplicitgc/" class="md-nav__link">
-Xenableexplicitgc
</a>
</li>
<li class="md-nav__item">
<a href="../xenablestringconstantgc/" class="md-nav__link">
-Xenablestringconstantgc
</a>
</li>
<li class="md-nav__item">
<a href="../xfastresolve/" class="md-nav__link">
-Xfastresolve
</a>
</li>
<li class="md-nav__item">
<a href="../xfuture/" class="md-nav__link">
-Xfuture
</a>
</li>
<li class="md-nav__item">
<a href="../xgc/" class="md-nav__link">
-Xgc
</a>
</li>
<li class="md-nav__item">
<a href="../xgcsplitheap/" class="md-nav__link">
-Xgc:splitheap
</a>
</li>
<li class="md-nav__item">
<a href="../xgcpolicy/" class="md-nav__link">
-Xgcpolicy
</a>
</li>
<li class="md-nav__item">
<a href="../xgcthreads/" class="md-nav__link">
-Xgcthreads
</a>
</li>
<li class="md-nav__item">
<a href="../xgcworkpackets/" class="md-nav__link">
-Xgcworkpackets
</a>
</li>
<li class="md-nav__item">
<a href="../xint/" class="md-nav__link">
-Xint
</a>
</li>
<li class="md-nav__item">
<a href="../xss/" class="md-nav__link">
-Xiss
</a>
</li>
<li class="md-nav__item">
<a href="../xjit/" class="md-nav__link">
-Xjit
</a>
</li>
<li class="md-nav__item">
<a href="../xjni/" class="md-nav__link">
-Xjni
</a>
</li>
<li class="md-nav__item">
<a href="../xlinenumbers/" class="md-nav__link">
-Xlinenumbers
</a>
</li>
<li class="md-nav__item">
<a href="../xloa/" class="md-nav__link">
-Xloa
</a>
</li>
<li class="md-nav__item">
<a href="../xloaminimum/" class="md-nav__link">
-Xloainitial
</a>
</li>
<li class="md-nav__item">
<a href="../xloaminimum/" class="md-nav__link">
-Xloamaximum
</a>
</li>
<li class="md-nav__item">
<a href="../xloaminimum/" class="md-nav__link">
-Xloaminimum
</a>
</li>
<li class="md-nav__item">
<a href="../xlockreservation/" class="md-nav__link">
-XlockReservation
</a>
</li>
<li class="md-nav__item">
<a href="../xlockword/" class="md-nav__link">
-Xlockword
</a>
</li>
<li class="md-nav__item">
<a href="../xlog/" class="md-nav__link">
-Xlog
</a>
</li>
<li class="md-nav__item">
<a href="../xlp/" class="md-nav__link">
-Xlp
</a>
</li>
<li class="md-nav__item">
<a href="../xlpcodecache/" class="md-nav__link">
-Xlp:codecache
</a>
</li>
<li class="md-nav__item">
<a href="../xlpobjectheap/" class="md-nav__link">
-Xlp:objectheap
</a>
</li>
<li class="md-nav__item">
<a href="../xmine/" class="md-nav__link">
-Xmaxe
</a>
</li>
<li class="md-nav__item">
<a href="../xminf/" class="md-nav__link">
-Xmaxf
</a>
</li>
<li class="md-nav__item">
<a href="../xmint/" class="md-nav__link">
-Xmaxt
</a>
</li>
<li class="md-nav__item">
<a href="../xmca/" class="md-nav__link">
-Xmca
</a>
</li>
<li class="md-nav__item">
<a href="../xmca/" class="md-nav__link">
-Xmco
</a>
</li>
<li class="md-nav__item">
<a href="../xmcrs/" class="md-nav__link">
-Xmcrs
</a>
</li>
<li class="md-nav__item">
<a href="../xmine/" class="md-nav__link">
-Xmine
</a>
</li>
<li class="md-nav__item">
<a href="../xminf/" class="md-nav__link">
-Xminf
</a>
</li>
<li class="md-nav__item">
<a href="../xmint/" class="md-nav__link">
-Xmint
</a>
</li>
<li class="md-nav__item">
<a href="../xmn/" class="md-nav__link">
-Xmn
</a>
</li>
<li class="md-nav__item">
<a href="../xmn/" class="md-nav__link">
-Xmns
</a>
</li>
<li class="md-nav__item">
<a href="../xmn/" class="md-nav__link">
-Xmnx
</a>
</li>
<li class="md-nav__item">
<a href="../xmo/" class="md-nav__link">
-Xmo
</a>
</li>
<li class="md-nav__item">
<a href="../xmo/" class="md-nav__link">
-Xmoi
</a>
</li>
<li class="md-nav__item">
<a href="../xmo/" class="md-nav__link">
-Xmos
</a>
</li>
<li class="md-nav__item">
<a href="../xmo/" class="md-nav__link">
-Xmox
</a>
</li>
<li class="md-nav__item">
<a href="../xmr/" class="md-nav__link">
-Xmr
</a>
</li>
<li class="md-nav__item">
<a href="../xmr/" class="md-nav__link">
-Xmrx
</a>
</li>
<li class="md-nav__item">
<a href="../xms/" class="md-nav__link">
-Xms
</a>
</li>
<li class="md-nav__item">
<a href="../xmso/" class="md-nav__link">
-Xmso
</a>
</li>
<li class="md-nav__item">
<a href="../xms/" class="md-nav__link">
-Xmx
</a>
</li>
<li class="md-nav__item">
<a href="../xaot/" class="md-nav__link">
-Xnoaot
</a>
</li>
<li class="md-nav__item">
<a href="../xclassgc/" class="md-nav__link">
-Xnoclassgc
</a>
</li>
<li class="md-nav__item">
<a href="../xcompactexplicitgc/" class="md-nav__link">
-Xnocompactexplicitgc
</a>
</li>
<li class="md-nav__item">
<a href="../xcompactgc/" class="md-nav__link">
-Xnocompactgc
</a>
</li>
<li class="md-nav__item">
<a href="../xcompressedrefs/" class="md-nav__link">
-Xnocompressedrefs
</a>
</li>
<li class="md-nav__item">
<a href="../xjit/" class="md-nav__link">
-Xnojit
</a>
</li>
<li class="md-nav__item">
<a href="../xlinenumbers/" class="md-nav__link">
-Xnolinenumbers
</a>
</li>
<li class="md-nav__item">
<a href="../xloa/" class="md-nav__link">
-Xnoloa
</a>
</li>
<li class="md-nav__item">
<a href="../xsigcatch/" class="md-nav__link">
-Xnosigcatch
</a>
</li>
<li class="md-nav__item">
<a href="../xsigchain/" class="md-nav__link">
-Xnosigchain
</a>
</li>
<li class="md-nav__item">
<a href="../xnumanone/" class="md-nav__link">
-Xnuma:none
</a>
</li>
<li class="md-nav__item">
<a href="../xoptionsfile/" class="md-nav__link">
-Xoptionsfile
</a>
</li>
<li class="md-nav__item">
<a href="../xquickstart/" class="md-nav__link">
-Xquickstart
</a>
</li>
<li class="md-nav__item">
<a href="../xrs/" class="md-nav__link">
-Xrs
</a>
</li>
<li class="md-nav__item">
<a href="../xsamplingexpirationtime/" class="md-nav__link">
-XsamplingExpirationTime
</a>
</li>
<li class="md-nav__item">
<a href="../xscdmx/" class="md-nav__link">
-Xscdmx
</a>
</li>
<li class="md-nav__item">
<a href="../xscminaot/" class="md-nav__link">
-Xscmaxaot
</a>
</li>
<li class="md-nav__item">
<a href="../xscminjitdata/" class="md-nav__link">
-Xscmaxjitdata
</a>
</li>
<li class="md-nav__item">
<a href="../xscminaot/" class="md-nav__link">
-Xscminaot
</a>
</li>
<li class="md-nav__item">
<a href="../xscminjitdata/" class="md-nav__link">
-Xscminjitdata
</a>
</li>
<li class="md-nav__item">
<a href="../xscmx/" class="md-nav__link">
-Xscmx
</a>
</li>
<li class="md-nav__item">
<a href="../xshareclasses/" class="md-nav__link">
-Xshareclasses
</a>
</li>
<li class="md-nav__item">
<a href="../xsigcatch/" class="md-nav__link">
-Xsigcatch
</a>
</li>
<li class="md-nav__item">
<a href="../xsigchain/" class="md-nav__link">
-Xsigchain
</a>
</li>
<li class="md-nav__item">
<a href="../xsignal/" class="md-nav__link">
-Xsignal
</a>
</li>
<li class="md-nav__item">
<a href="../xsoftmx/" class="md-nav__link">
-Xsoftmx
</a>
</li>
<li class="md-nav__item">
<a href="../xsoftrefthreshold/" class="md-nav__link">
-Xsoftrefthreshold
</a>
</li>
<li class="md-nav__item">
<a href="../xss/" class="md-nav__link">
-Xss
</a>
</li>
<li class="md-nav__item">
<a href="../xss/" class="md-nav__link">
-Xssi
</a>
</li>
<li class="md-nav__item">
<a href="../xsyslog/" class="md-nav__link">
-Xsyslog
</a>
</li>
<li class="md-nav__item">
<a href="../xtgc/" class="md-nav__link">
-Xtgc
</a>
</li>
<li class="md-nav__item">
<a href="../xthr/" class="md-nav__link">
-Xthr
</a>
</li>
<li class="md-nav__item">
<a href="../xtlhprefetch/" class="md-nav__link">
-XtlhPrefetch
</a>
</li>
<li class="md-nav__item">
<a href="../xtrace/" class="md-nav__link">
-Xtrace
</a>
</li>
<li class="md-nav__item">
<a href="../xtunevirtualized/" class="md-nav__link">
-Xtune:virtualized
</a>
</li>
<li class="md-nav__item">
<a href="../xverbosegclog/" class="md-nav__link">
-Xverbosegclog
</a>
</li>
<li class="md-nav__item">
<a href="../xverify/" class="md-nav__link">
-Xverify
</a>
</li>
<li class="md-nav__item">
<a href="../xzero/" class="md-nav__link">
-Xzero
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_14_6" type="checkbox" id="__nav_14_6" >
<label class="md-nav__link" for="__nav_14_6">
JVM -XX options
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="JVM -XX options" data-md-level="2">
<label class="md-nav__title" for="__nav_14_6">
<span class="md-nav__icon md-icon"></span>
JVM -XX options
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../xx_jvm_commands/" class="md-nav__link">
Using -XX options
</a>
</li>
<li class="md-nav__item">
<a href="../xxactiveprocessorcount/" class="md-nav__link">
-XXActiveProcessorCount
</a>
</li>
<li class="md-nav__item">
<a href="../xxallowvmshutdown/" class="md-nav__link">
-XXallowvmshutdown
</a>
</li>
<li class="md-nav__item">
<a href="../xxalwayspretouch/" class="md-nav__link">
-XX:[+|-]AlwaysPreTouch
</a>
</li>
<li class="md-nav__item">
<a href="../xxclassrelationshipverifier/" class="md-nav__link">
-XX:[+|-]ClassRelationshipVerifier
</a>
</li>
<li class="md-nav__item">
<a href="../xxconcgcthreads/" class="md-nav__link">
-XX:ConcGCThreads
</a>
</li>
<li class="md-nav__item">
<a href="../xxcodecachetotal/" class="md-nav__link">
-XX:codecachetotal
</a>
</li>
<li class="md-nav__item">
<a href="../xxcompactstrings/" class="md-nav__link">
-XX:[+|-]CompactStrings
</a>
</li>
<li class="md-nav__item">
<a href="../xxdiagnosesynconvaluebasedclasses/" class="md-nav__link">
-XX:DiagnoseSyncOnValueBasedClasses
</a>
</li>
<li class="md-nav__item">
<a href="../xxdisableexplicitgc/" class="md-nav__link">
-XX:[+|-]DisableExplicitGC
</a>
</li>
<li class="md-nav__item">
<a href="../xxdisclaimjitscratch/" class="md-nav__link">
-XX:[+|-]DisclaimJitScratch
</a>
</li>
<li class="md-nav__item">
<a href="../xxenablecpumonitor/" class="md-nav__link">
-XX:[+|-]EnableCPUMonitor
</a>
</li>
<li class="md-nav__item">
<a href="../xxexitonoutofmemoryerror/" class="md-nav__link">
-XX:[+|-]ExitOnOutOfMemoryError
</a>
</li>
<li class="md-nav__item">
<a href="../xxgloballockreservation/" class="md-nav__link">
-XX:[+|-]GlobalLockReservation
</a>
</li>
<li class="md-nav__item">
<a href="../xxhandlesigxfsz/" class="md-nav__link">
-XX:[+|-]HandleSIGXFSZ
</a>
</li>
<li class="md-nav__item">
<a href="../xxhandlesigabrt/" class="md-nav__link">
-XX:[+|-]HandleSIGABRT
</a>
</li>
<li class="md-nav__item">
<a href="../xxheapdumponoutofmemory/" class="md-nav__link">
-XX:[+|-]HeapDumpOnOutOfMemory
</a>
</li>
<li class="md-nav__item">
<a href="../xxheapdumppath/" class="md-nav__link">
-XX:HeapDumpPath
</a>
</li>
<li class="md-nav__item">
<a href="../xxheapmanagementmxbeancompatibility/" class="md-nav__link">
-XX:[+|-]HeapManagementMXBeanCompatibility
</a>
</li>
<li class="md-nav__item">
<a href="../xxidletuningcompactonidle/" class="md-nav__link">
-XX:[+|-]IdleTuningCompactOnIdle
</a>
</li>
<li class="md-nav__item">
<a href="../xxidletuninggconidle/" class="md-nav__link">
-XX:[+|-]IdleTuningGcOnIdle
</a>
</li>
<li class="md-nav__item">
<a href="../xxidletuningminfreeheaponidle/" class="md-nav__link">
-XX:IdleTuningMinFreeHeapOnIdle
</a>
</li>
<li class="md-nav__item">
<a href="../xxidletuningminidlewaittime/" class="md-nav__link">
-XX:IdleTuningMinIdleWaitTime
</a>
</li>
<li class="md-nav__item">
<a href="../xxignoreunrecognizedvmoptions/" class="md-nav__link">
-XX:[+|-]IgnoreUnrecognizedVMOptions
</a>
</li>
<li class="md-nav__item">
<a href="../xxignoreunrecognizedxxcolonoptions/" class="md-nav__link">
-XX:[+|-]IgnoreUnrecognizedXXColonOptions
</a>
</li>
<li class="md-nav__item">
<a href="../xxinitialrampercentage/" class="md-nav__link">
-XX:InitialRAMPercentage
</a>
</li>
<li class="md-nav__item">
<a href="../xxinitialheapsize/" class="md-nav__link">
-XX:InitialHeapSize
</a>
</li>
<li class="md-nav__item">
<a href="../xxinterleavememory/" class="md-nav__link">
-XX:[+|-]InterleaveMemory
</a>
</li>
<li class="md-nav__item">
<a href="../xxjitinlinewatches/" class="md-nav__link">
-XX:[+|-]JITInlineWatches
</a>
</li>
<li class="md-nav__item">
<a href="../xxlazysymbolresolution/" class="md-nav__link">
-XX:[+|-]LazySymbolResolution
</a>
</li>
<li class="md-nav__item">
<a href="../xxlegacyxlogoption/" class="md-nav__link">
-XX:[+|-]LegacyXLogOption
</a>
</li>
<li class="md-nav__item">
<a href="../xxmaxdirectmemorysize/" class="md-nav__link">
-XX:MaxDirectMemorySize
</a>
</li>
<li class="md-nav__item">
<a href="../xxinitialheapsize/" class="md-nav__link">
-XX:MaxHeapSize
</a>
</li>
<li class="md-nav__item">
<a href="../xxinitialrampercentage/" class="md-nav__link">
-XX:MaxRAMPercentage
</a>
</li>
<li class="md-nav__item">
<a href="../xxonoutofmemoryerror/" class="md-nav__link">
-XX:OnOutOfMemoryError
</a>
</li>
<li class="md-nav__item">
<a href="../xxoriginaljdk8heapsizecompatibilitymode/" class="md-nav__link">
-XX:[+|-]OriginalJDK8HeapSizeCompatibilityMode
</a>
</li>
<li class="md-nav__item">
<a href="../xxnosuballoc32bitmem/" class="md-nav__link">
-XXnosuballoc32bitmem
</a>
</li>
<li class="md-nav__item">
<a href="../xxpagealigndirectmemory/" class="md-nav__link">
-XX:[+|-]PageAlignDirectMemory
</a>
</li>
<li class="md-nav__item">
<a href="../xxparallelcmsthreads/" class="md-nav__link">
-XX:ParallelCMSThreads
</a>
</li>
<li class="md-nav__item">
<a href="../xxparallelgcthreads/" class="md-nav__link">
-XX:ParallelGCThreads
</a>
</li>
<li class="md-nav__item">
<a href="../xxportablesharedcache/" class="md-nav__link">
-XX:[+|-]PortableSharedCache
</a>
</li>
<li class="md-nav__item">
<a href="../xxpositiveidentityhash/" class="md-nav__link">
-XX:[+|-]PositiveIdentityHash
</a>
</li>
<li class="md-nav__item">
<a href="../xxprintcodecache/" class="md-nav__link">
-XX:[+|-]PrintCodeCache
</a>
</li>
<li class="md-nav__item">
<a href="../xxprintflagsfinal/" class="md-nav__link">
-XX:[+|-]PrintFlagsFinal
</a>
</li>
<li class="md-nav__item">
<a href="../xxreadipinfoforras/" class="md-nav__link">
-XX:[+|-]ReadIPInfoForRAS
</a>
</li>
<li class="md-nav__item">
<a href="../xxreducecpumonitoroverhead/" class="md-nav__link">
-XX:[+|-]ReduceCPUMonitorOverhead
</a>
</li>
<li class="md-nav__item">
<a href="../xxruntimeinstrumentation/" class="md-nav__link">
-XX:[+|-]RuntimeInstrumentation
</a>
</li>
<li class="md-nav__item">
<a href="../xxsethwprefetch/" class="md-nav__link">
-XXsetHWPrefetch
</a>
</li>
<li class="md-nav__item">
<a href="../xxshareanonymousclasses/" class="md-nav__link">
-XX:[+|-]ShareAnonymousClasses
</a>
</li>
<li class="md-nav__item">
<a href="../xxshareclassesenablebci/" class="md-nav__link">
-XX:ShareClassesDisableBCI
</a>
</li>
<li class="md-nav__item">
<a href="../xxshareclassesenablebci/" class="md-nav__link">
-XX:ShareClassesEnableBCI
</a>
</li>
<li class="md-nav__item">
<a href="../xxsharedcachehardlimit/" class="md-nav__link">
-XX:SharedCacheHardLimit
</a>
</li>
<li class="md-nav__item">
<a href="../xxshareunsafeclasses/" class="md-nav__link">
-XX:[+|-]ShareUnsafeClasses
</a>
</li>
<li class="md-nav__item">
<a href="../xxstacktraceinthrowable/" class="md-nav__link">
-XX:-StackTraceInThrowable
</a>
</li>
<li class="md-nav__item">
<a href="../xxtransparenthugepage/" class="md-nav__link">
-XX:[+|-]TransparentHugePage
</a>
</li>
<li class="md-nav__item">
<a href="../xxusecompressedoops/" class="md-nav__link">
-XX:[+|-]UseCompressedOops
</a>
</li>
<li class="md-nav__item">
<a href="../xxusecontainersupport/" class="md-nav__link">
-XX:[+|-]UseContainerSupport
</a>
</li>
<li class="md-nav__item">
<a href="../xxusegcstartuphints/" class="md-nav__link">
-XX:[+|-]UseGCStartupHints
</a>
</li>
<li class="md-nav__item">
<a href="../xxusenogc/" class="md-nav__link">
-XX:[+|-]UseNoGC
</a>
</li>
<li class="md-nav__item">
<a href="../xxverboseverification/" class="md-nav__link">
-XX:[+|-]VerboseVerification
</a>
</li>
<li class="md-nav__item">
<a href="../xxvmlockclassloader/" class="md-nav__link">
-XX:[+|-]VMLockClassLoader
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_15" type="checkbox" id="__nav_15" >
<label class="md-nav__link" for="__nav_15">
Reference
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label=" Reference" data-md-level="1">
<label class="md-nav__title" for="__nav_15">
<span class="md-nav__icon md-icon"></span>
Reference
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../openj9_support/" class="md-nav__link">
Supported environments
</a>
</li>
<li class="md-nav__item">
<a href="../openj9_defaults/" class="md-nav__link">
Default settings
</a>
</li>
<li class="md-nav__item">
<a href="../openj9_signals/" class="md-nav__link">
Signal handling
</a>
</li>
<li class="md-nav__item">
<a href="../openj9_directories/" class="md-nav__link">
Directory conventions
</a>
</li>
<li class="md-nav__item">
<a href="../messages_intro/" class="md-nav__link">
OpenJ9 messages
</a>
</li>
<li class="md-nav__item">
<a href="../env_var/" class="md-nav__link">
Environment variables
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_16" type="checkbox" id="__nav_16" >
<label class="md-nav__link" for="__nav_16">
API documentation
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="API documentation" data-md-level="1">
<label class="md-nav__title" for="__nav_16">
<span class="md-nav__icon md-icon"></span>
API documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../api-overview/" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_16_2" type="checkbox" id="__nav_16_2" >
<label class="md-nav__link" for="__nav_16_2">
Java 8 API
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Java 8 API" data-md-level="2">
<label class="md-nav__title" for="__nav_16_2">
<span class="md-nav__icon md-icon"></span>
Java 8 API
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../api-conditionhandling/" class="md-nav__link">
Condition exception handling
</a>
</li>
<li class="md-nav__item">
<a href="../api-cuda/" class="md-nav__link">
CUDA4J
</a>
</li>
<li class="md-nav__item">
<a href="../api-daa/" class="md-nav__link">
Data access acceleration
</a>
</li>
<li class="md-nav__item">
<a href="../api-dtfj/" class="md-nav__link">
DTFJ
</a>
</li>
<li class="md-nav__item">
<a href="../api-gpu/" class="md-nav__link">
GPU
</a>
</li>
<li class="md-nav__item">
<a href="../api-jvm/" class="md-nav__link">
JVM diagnostic utilities
</a>
</li>
<li class="md-nav__item">
<a href="../api-langmgmt/" class="md-nav__link">
Monitoring and management
</a>
</li>
<li class="md-nav__item">
<a href="../api-shrc/" class="md-nav__link">
Shared classes
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../api-jdk11/" class="md-nav__link">
Java 11 API
</a>
</li>
<li class="md-nav__item">
<a href="../api-jdk16/" class="md-nav__link">
Java 16 API
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../legal/" class="md-nav__link">
Legal
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page...">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page...
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#gencon-examples" class="md-nav__link">
gencon examples
</a>
<nav class="md-nav" aria-label="gencon examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#scavenge-partial-gc-cycle" class="md-nav__link">
Scavenge partial GC cycle
</a>
<nav class="md-nav" aria-label="Scavenge partial GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#concurrent-scavenge-partial-gc-cycle-non-default" class="md-nav__link">
Concurrent scavenge partial GC cycle (non-default)
</a>
</li>
<li class="md-nav__item">
<a href="#gencon-global-gc-cycle" class="md-nav__link">
gencon global GC cycle
</a>
<nav class="md-nav" aria-label="gencon global GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary_1" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#balanced-examples" class="md-nav__link">
balanced examples
</a>
<nav class="md-nav" aria-label="balanced examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#balanced-partial-gc-cycle" class="md-nav__link">
balanced partial GC cycle
</a>
<nav class="md-nav" aria-label="balanced partial GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary_2" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#balanced-global-mark-gc-cycle" class="md-nav__link">
balanced global mark GC cycle
</a>
<nav class="md-nav" aria-label="balanced global mark GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#global-mark-phase" class="md-nav__link">
Global mark phase
</a>
</li>
<li class="md-nav__item">
<a href="#sweep-phase" class="md-nav__link">
Sweep phase
</a>
</li>
<li class="md-nav__item">
<a href="#summary_3" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#balanced-global-gc-cycle" class="md-nav__link">
balanced global GC cycle
</a>
<nav class="md-nav" aria-label="balanced global GC cycle">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary_4" class="md-nav__link">
Summary
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<!--
* Copyright (c) 2017, 2021 IBM Corp. and others
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/legal/epl-2.0/ or the Apache
* License, Version 2.0 which accompanies this distribution and
* is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* This Source Code may also be made available under the
* following Secondary Licenses when the conditions for such
* availability set forth in the Eclipse Public License, v. 2.0
* are satisfied: GNU General Public License, version 2 with
* the GNU Classpath Exception [1] and GNU General Public
* License, version 2 with the OpenJDK Assembly Exception [2].
*
* [1] https://www.gnu.org/software/classpath/license.html
* [2] http://openjdk.java.net/legal/assembly-exception.html
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH
* Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
-->
<h1 id="log-examples">Log examples</h1>
<p>To help you understand how garbage collection (GC) processes memory for your application and how these processes are recorded, a number of annotated log examples are provided from different GC policies. Each example covers a particular type of cycle from a particular policy. By following the examples, you can learn how to interpret the XML elements in a log.</p>
<h2 id="gencon-examples"><code>gencon</code> examples</h2>
<p>The <a href="../gc/#gencon-policy-default"><code>gencon</code> policy</a> uses two types of cycle; a partial GC cycle and a global GC cycle. By default, the partial GC cycle runs a <em>stop-the-world</em> (STW) <em>scavenge</em> operation. On specific platforms, <code>gencon</code> can run a concurrent scavenge operation (<a href="../xgc/#concurrentscavenge">-Xgc:concurrentScavenge</a>) instead, if enabled at run time.</p>
<p>The start of a <code>gencon</code> cycle is recorded in the log by the following elements and attributes:</p>
<table style="width:100%" align="center">
<caption>Table showing types of <code>gencon</code> cycle along with the corresponding trigger reason and XML elements for each type. </caption>
<thead>
<tr>
<th scope="col">GC cycle</th>
<th align="center" scope="col">Value of <code>type</code> attribute of the <code>&lt;cycle-start&gt;</code> and <code>&lt;cycle-end&gt;</code>elements</th>
<th align="center"scope="col">Element that logs the cycle trigger</th>
<th scope="col">Trigger reason</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> Global</td>
<td align="center"><code>global</code> </td>
<td align="center"><code>&lt;concurrent-kickoff&gt;</code></td>
<td>Low free memory tenure area threshold reached. Cycle trigger element is located before the <code>&lt;cycle-start&gt;</code> element.</td>
</tr>
<tr>
<td scope="row"> Partial</td>
<td align="center"> <code>scavenge</code></td>
<td align="center"><code>&lt;af-start&gt;</code></td>
<td>Allocation failure. Cycle trigger element is located before the <code>&lt;cycle-start&gt;</code> element.</td>
<tr>
</tbody>
</table>
<p>You can use the <code>type</code> attribute of the <code>&lt;gc-start&gt;</code> and <code>&lt;gc-end&gt;</code> elements to locate a particular cycle. You can also locate a particular type of cycle by searching for the element that records the cycle trigger, which is located before the <code>&lt;cycle-start&gt;</code> element.</p>
<p>You can analyze the increments and operations that are associated with a particular type of cycle by locating and interpreting the elements in the following table:</p>
<table style="width:100%" align="center">
<caption>Table showing increments and operations that are associated with the <code>gencon</code> partial scavenge and global cycles.</caption>
<thead>
<tr>
<th scope="col">GC process</th>
<th align="center" scope="col">Elements that log the start and end of the event</th>
<th align="center" scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> GC cycle</td>
<td align="center"><code>&lt;cycle-start&gt;</code>, <code>&lt;cycle-end&gt;</code></td>
<td >The start and end of a GC cycle.</td>
</tr>
<tr>
<td scope="row"> GC STW increment</td>
<td align="center"><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></td>
<td >The start and end of a GC increment that begins with a pause.</td>
<tr>
<tr>
<td scope="row"> GC STW increment</td>
<td align="center"><code>&lt;concurrent-kickoff&gt;</code></td>
<td>The start of the initial GC increment of the global concurrent cycle that begins the initial mark operation.</td>
<tr>
<tr>
<td scope="row"> GC STW increment</td>
<td align="center"><code>&lt;concurrent-global-final&gt;</code></td>
<td>The start of the final GC increment of the global concurrent cycle that executes the final collection.</td>
<tr>
<tr>
<td scope="row"> GC operations and suboperations</td>
<td align="center"><code>&lt;gc-op&gt;</code></td>
<td>A GC operation such as mark or sweep, or a suboperation such as class unload.</td>
<tr>
</tbody>
</table>
<p><span aria-hidden="true" class="twemoji note"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"/></svg></span> <strong>Note:</strong> For more information about the XML structure of GC cycles, see <a href="../vgclog/#gc-cycles">GC cycles</a>. For more information about GC cycle increments, see <a href="../vgclog/#gc-increments-and-interleaving">GC increments and interleaving</a>.</p>
<p>The following examples use log excerpts to show how the different types of <code>gencon</code> cycle are logged.</p>
<h3 id="scavenge-partial-gc-cycle">Scavenge partial GC cycle</h3>
<p>The following example is taken from a <code>gencon</code> log. The output is broken down into sections with supporting text to explain the GC processing that is taking place.</p>
<p>To search for a scavenge partial GC cycle, you can search for the <code>type</code> attribute value <code>scavenge</code> in <code>cycle-start</code> and <code>cycle-end</code> elements, or search for the <code>&lt;af&gt;</code> element that logs the allocation failure trigger.</p>
<p>By default, the <code>gencon</code> partial GC cycle runs by using a single STW pause. The cycle performs only one operation, a scavenge operation, which runs only on the <em>nursery</em> area. The cycle consists of a single GC increment, which is labeled by using the elements that are shown in the following table:</p>
<table style="width:100%" align="center">
<caption>Table showing the <code>gencon</code> default partial scavenge cycle's GC increment and corresponding XML elements.</caption>
<thead>
<tr>
<th align="center" scope="col">GC operation</th>
<th align="center" scope="col">GC increment</th>
<th align="center" scope="col">STW or concurrent</th>
<th align="center" scope="col">XML element of GC increment</th>
<th align="center" scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> scavenge</td>
<td align="center">single </code></td>
<td align="center">STW </code></td>
<td align="center"><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></code></td>
<td>Contains detailed information about copied objects and the weak roots processing operation</code></td>
</tr>
</tbody>
</table>
<p>The scavenge partial GC cycle follows a general structure in the verbose GC log as shown. Some elements are omitted for clarity:</p>
<pre><code class="xml">
&lt;exclusive-start/&gt; (STW Pause starts)
&lt;af-start/&gt; (allocation failure trigger recorded)
&lt;cycle-start/&gt; (scavenge cycle starts)
&lt;gc-start&gt; (scavenge cycle increment starts)
&lt;mem-info&gt; (memory status before operation)
&lt;mem&gt;&lt;/mem&gt; (status of different areas of heap)
&lt;/mem-info&gt;
&lt;/gc-start&gt;
&lt;allocation-stats/&gt; (Snapshot of how memory was divided up between
... application threads before current cycle started)
&lt;gc-op&gt; “scavenge&quot;&lt;/gc-op&gt; (scavenge operation completed)
&lt;gc-end&gt; (scavenge cycle increment ends)
&lt;mem-info&gt; (memory status after operation)
&lt;mem&gt;&lt;/mem&gt; (status of different areas of heap)
&lt;/mem-info&gt;
&lt;/gc-end&gt;
&lt;/cycle-end&gt; (scavenge cycle ends)
&lt;allocation-satisfied/&gt; (required allocation has been achieved)
&lt;af-end/&gt;
&lt;exclusive-end&gt; (STW for scavenge cycle ends)
...
</code></pre>
<p>The first activity in the cycle is recorded by an <code>&lt;exclusive-start&gt;</code> element, which indicates the start of the STW pause. Application (or <em>mutator</em>) threads are halted to give the garbage collector exclusive access to the Java&trade; object heap:</p>
<pre><code class="xml">&lt;!-- Start of gencon scavenge partial GC cycle example --&gt;
&lt;exclusive-start id=&quot;12392&quot; timestamp=&quot;2020-10-18T13:35:45.000&quot; intervalms=&quot;406.180&quot;&gt;
&lt;response-info timems=&quot;0.070&quot; idlems=&quot;0.070&quot; threads=&quot;0&quot; lastid=&quot;00000000013D6900&quot; lastname=&quot;LargeThreadPool-thread-68&quot; /&gt;
&lt;/exclusive-start&gt;
</code></pre>
<p>The <code>&lt;af-start&gt;</code> element indicates that the cycle was triggered by an allocation failure in the nursery (<code>type="nursery"</code>) area of the heap:</p>
<pre><code class="xml">&lt;af-start id=&quot;12393&quot; threadId=&quot;00000000013D7280&quot; totalBytesRequested=&quot;8200&quot; timestamp=&quot;2020-10-18T13:35:45.000&quot; intervalms=&quot;418.233&quot; type=&quot;nursery&quot; /&gt;
</code></pre>
<p>The <code>&lt;cycle-start&gt;</code> element marks the start of the cycle. The attribute <code>type="scavenge"</code> confirms that this activity is a scavenge partial GC cycle:</p>
<pre><code class="xml">&lt;cycle-start id=&quot;12394&quot; type=&quot;scavenge&quot; contextid=&quot;0&quot; timestamp=&quot;2020-10-18T13:35:45.000&quot; intervalms=&quot;418.231&quot; /&gt;
</code></pre>
<p>Most elements are labeled with an <code>id</code> attribute that increases in value incrementally, a<code>timestamp</code> attribute, and a <code>contextid</code> attribute. All elements that record GC increments and operations that are associated with a particular cycle have a <code>contextid</code> value that matches the <code>id</code> value of the cycle. The <code>&lt;cycle-start&gt;</code> element of this example cycle has an <code>id="12394"</code>, so all subsequent elements that have a <code>contextid="4"</code>, such as the <code>&lt;gc-start&gt;</code> increment element and the <code>&lt;gc-op&gt;</code> operation element, are associated with this particular example cycle. </p>
<p>The <code>&lt;gc-start&gt;</code> element records the first GC increment. In this <code>&lt;gc-start&gt;</code> section, you can find information about the amount of memory available (<code>&lt;mem-info&gt;</code>) and where it is located in the Java object heap.</p>
<p>The memory snapshot within the <code>&lt;gc-start&gt;</code> element is taken before the scavenge operation and can be compared with a similar snapshot that is taken afterward to understand the effect on the heap.</p>
<pre><code class="xml">&lt;gc-start id=&quot;12395&quot; type=&quot;scavenge&quot; contextid=&quot;12394&quot; timestamp=&quot;2020-10-18T13:35:45.000&quot;&gt;
&lt;mem-info id=&quot;12396&quot; free=&quot;414960320&quot; total=&quot;1073741824&quot; percent=&quot;38&quot;&gt;
&lt;mem type=&quot;nursery&quot; free=&quot;0&quot; total=&quot;268435456&quot; percent=&quot;0&quot;&gt;
&lt;mem type=&quot;allocate&quot; free=&quot;0&quot; total=&quot;241565696&quot; percent=&quot;0&quot; /&gt;
&lt;mem type=&quot;survivor&quot; free=&quot;0&quot; total=&quot;26869760&quot; percent=&quot;0&quot; /&gt;
&lt;/mem&gt;
&lt;mem type=&quot;tenure&quot; free=&quot;414960320&quot; total=&quot;805306368&quot; percent=&quot;51&quot;&gt;
&lt;mem type=&quot;soa&quot; free=&quot;374694592&quot; total=&quot;765040640&quot; percent=&quot;48&quot; /&gt;
&lt;mem type=&quot;loa&quot; free=&quot;40265728&quot; total=&quot;40265728&quot; percent=&quot;100&quot; /&gt;
&lt;/mem&gt;
&lt;remembered-set count=&quot;21474&quot; /&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
</code></pre>
<p>The following statements describe the object heap memory allocation at the start of the increment:</p>
<ul>
<li>The <em>allocate</em> space of the nursery area is full, or close to full. The allocation failure was triggered by the lack of available memory in this space.</li>
<li>The <em>survivor</em> space of the nursery area is reported as 'full' to reflect that no available memory is available to allocate to the mutator threads. The entire survivor space is reserved for GC operations during the GC increment.</li>
<li>The <em>tenure</em> area has 395.7 MB (414,960,320B) of free memory available.</li>
</ul>
<p>The next element <code>&lt;allocation-stats&gt;</code> shows a snapshot, which was taken before the cycle started, of how memory was divided up between application threads. In this example, the thread that used the most memory was <code>LargeThreadPool-thread-79</code>.</p>
<pre><code class="xml">&lt;allocation-stats totalBytes=&quot;235362176&quot; &gt;
&lt;allocated-bytes non-tlh=&quot;32880&quot; tlh=&quot;235329296&quot; /&gt;
&lt;largest-consumer threadName=&quot;LargeThreadPool-thread-79&quot; threadId=&quot;00000000013F0C00&quot; bytes=&quot;6288544&quot; /&gt;
&lt;/allocation-stats&gt;
</code></pre>
<p>The scavenge GC operation is recorded by the <code>&lt;gc-op&gt;</code> element; child elements record details about the operation. For example,</p>
<pre><code class="xml">&lt;gc-op id=&quot;12397&quot; type=&quot;scavenge&quot; timems=&quot;11.649&quot; contextid=&quot;12394&quot; timestamp=&quot;2020-10-18T13:35:45.012&quot;&gt;
&lt;scavenger-info tenureage=&quot;7&quot; tenuremask=&quot;4080&quot; tiltratio=&quot;89&quot; /&gt;
&lt;memory-copied type=&quot;nursery&quot; objects=&quot;154910&quot; bytes=&quot;6027440&quot; bytesdiscarded=&quot;394832&quot; /&gt;
&lt;memory-copied type=&quot;tenure&quot; objects=&quot;16171&quot; bytes=&quot;562848&quot; bytesdiscarded=&quot;3064&quot; /&gt;
&lt;ownableSynchronizers candidates=&quot;10838&quot; cleared=&quot;10824&quot; /&gt;
&lt;references type=&quot;soft&quot; candidates=&quot;24&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; dynamicThreshold=&quot;16&quot; maxThreshold=&quot;32&quot; /&gt;
&lt;references type=&quot;weak&quot; candidates=&quot;390&quot; cleared=&quot;269&quot; enqueued=&quot;269&quot; /&gt;
&lt;references type=&quot;phantom&quot; candidates=&quot;1&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; /&gt;
&lt;object-monitors candidates=&quot;132&quot; cleared=&quot;0&quot; /&gt;
&lt;/gc-op&gt;
</code></pre>
<p>The <code>&lt;memory-copied&gt;</code> element indicates that 5.75 MB (6,027,440B) of reachable objects were moved by the scavenge operation from the allocate space to the survivor space in the nursery area, and 0.54 MB(562,848 B) were moved to the tenure area.</p>
<p>The <code>&lt;scavenger-info&gt;</code> element shows that the <em>tenure age</em> is set to <code>7</code>. Any object in the allocate space with an age less than or equal to <code>7</code> is copied to the survivor space during this <code>scavenge</code>operation. Any object that is copied between the allocate and survivor areas more than <code>7</code> times is moved to the tenure area.</p>
<p>For more information about how the scavenge operation acts on the Java object heap, see <a href="../gc/#gc-processing">GC processing</a>.</p>
<p>The end of the increment is recorded with <code>&lt;gc-end&gt;</code> and provides another snapshot of memory allocation on the heap, similar to <code>&lt;gc-start&gt;</code>.</p>
<pre><code class="xml">&lt;gc-end id=&quot;12398&quot; type=&quot;scavenge&quot; contextid=&quot;12394&quot; durationms=&quot;11.785&quot; usertimems=&quot;46.278&quot; systemtimems=&quot;0.036&quot; stalltimems=&quot;0.145&quot; timestamp=&quot;2020-10-18T13:35:45.012&quot; activeThreads=&quot;4&quot;&gt;
&lt;mem-info id=&quot;12399&quot; free=&quot;649473560&quot; total=&quot;1073741824&quot; percent=&quot;60&quot;&gt;
&lt;mem type=&quot;nursery&quot; free=&quot;235142120&quot; total=&quot;268435456&quot; percent=&quot;87&quot;&gt;
&lt;mem type=&quot;allocate&quot; free=&quot;235142120&quot; total=&quot;241565696&quot; percent=&quot;97&quot; /&gt;
&lt;mem type=&quot;survivor&quot; free=&quot;0&quot; total=&quot;26869760&quot; percent=&quot;0&quot; /&gt;
&lt;/mem&gt;
&lt;mem type=&quot;tenure&quot; free=&quot;414331440&quot; total=&quot;805306368&quot; percent=&quot;51&quot; macro-fragmented=&quot;0&quot;&gt;
&lt;mem type=&quot;soa&quot; free=&quot;374065712&quot; total=&quot;765040640&quot; percent=&quot;48&quot; /&gt;
&lt;mem type=&quot;loa&quot; free=&quot;40265728&quot; total=&quot;40265728&quot; percent=&quot;100&quot; /&gt;
&lt;/mem&gt;
&lt;pending-finalizers system=&quot;0&quot; default=&quot;0&quot; reference=&quot;269&quot; classloader=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;13792&quot; /&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>The Java object heap memory allocation at the end of the increment is as follows:</p>
<ul>
<li>97% of the allocate space of the nursery area is now available as free memory.</li>
<li>The survivor space of the nursery area is still reported as 'full' to reflect that the entire survivor space is reserved for GC operations during the next GC increment.</li>
<li>The tenure area has 395 MB (414,331,440B) of free memory available. The scavenge operation copied 562 KB from the nursery area to the tenure area so less memory is now available in the tenure area.</li>
</ul>
<p>The scavenge operation successfully reclaimed memory in the allocate space of the nursery area by copying objects from the allocate space into the survivor space of the nursery area, and copying objects from the survivor space into the tenure area.</p>
<p>The cycle ends (<code>&lt;cycle-end&gt;</code>). The following <code>&lt;allocation-satisfied&gt;</code> element indicates that the allocation request that caused the allocation failure can now complete successfully. The STW pause ends with the <code>&lt;exclusive-end&gt;</code> element:</p>
<pre><code class="xml">&lt;cycle-end id=&quot;12400&quot; type=&quot;scavenge&quot; contextid=&quot;12394&quot; timestamp=&quot;2020-10-18T13:35:45.012&quot; /&gt;
&lt;allocation-satisfied id=&quot;12401&quot; threadId=&quot;00000000013D6900&quot; bytesRequested=&quot;8200&quot; /&gt;
&lt;af-end id=&quot;12402&quot; timestamp=&quot;2020-10-18T13:35:45.012&quot; threadId=&quot;00000000013D7280&quot; success=&quot;true&quot; from=&quot;nursery&quot;/&gt;
&lt;exclusive-end id=&quot;12403&quot; timestamp=&quot;2020-10-18T13:35:45.012&quot; durationms=&quot;12.319&quot; /&gt;
&lt;!-- End of gencon partial GC cycle example --&gt;
</code></pre>
<h4 id="summary">Summary</h4>
<p>Analyzing the structure and elements of this example log output shows that this example global cycle has the following characteristics:</p>
<ul>
<li>
<p>The GC cycle begins with an STW pause due to an allocation failure.</p>
</li>
<li>
<p>All GC operations and suboperations that are associated with this cycle occur during the STW pause</p>
</li>
<li>
<p>The cycle consists of only 1 GC increment, which runs a single scavenge operation.</p>
</li>
<li>
<p>The GC cycle reclaims memory in the allocate area of the nursery area by coping objects from the allocate area to the survivor area and also to the tenure area.</p>
</li>
</ul>
<h3 id="concurrent-scavenge-partial-gc-cycle-non-default">Concurrent scavenge partial GC cycle (non-default)</h3>
<p>When concurrent scavenge mode is enabled, the partial GC cycle is run as a <a href="../gc/#concurrent-scavenge">Concurrent Scavenge</a> cycle. This partial GC cycle is divided into increments to enable the majority of the scavenge operation to run concurrently with running application (or <em>mutator</em>) threads. The concurrent increment can run while application threads run, and also while the intermediate concurrent increment of the global GC cycle runs. The interleaving of the concurrent scavenge partial GC cycle with the global cycle can be seen in the logs.</p>
<p>The following elements log the GC increments and operations of the concurrent scavenge partial GC cycle:</p>
<table style="width:100%">
<caption>Table showing the <code>gencon</code> concurrent (non-default) partial scavenge cycle's GC increment and corresponding XML elements.</caption>
<thead>
<tr>
<th align="center" scope="col">GC operation</th>
<th align="center" scope="col">GC increment</th>
<th align="center" scope="col">STW or concurrent</th>
<th align="center" scope="col">XML element of GC increment</th>
<th align="center" scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> scavenge</td>
<td align="center">initial </code></td>
<td align="center">STW </code></td>
<td align="center"><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></code></td>
<td>Root scanning, reported as a single scavenge operation.</code></td>
</tr>
<tr>
<td scope="row"> scavenge</td>
<td align="center">intermediate </code></td>
<td align="center">concurrent</code></td>
<td align="center"><code>&lt;concurrent-start&gt;</code>, <code>&lt;concurrent-end&gt;</code></td>
<td>Live objects are traversed and evacuated (*copy forward*). Operation is reported as a <code>scavenge</code> operation.</td>
</tr>
<tr>
<td scope="row"> scavenge</td>
<td align="center">final</code></td>
<td align="center">STW </code></td>
<td align="center"><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></td>
<td>weak roots scanning, reported as a complex scavenge operation. <code>&lt;gc-op&gt;</code> contains specific details for each of the weak root groups.</code></td>
</tr>
</tbody>
</table>
<p>To search for a concurrent scavenge partial GC cycle, you can search for the <code>type</code> attribute value <code>scavenge</code> in <code>cycle-start</code> and <code>cycle-end</code> elements, or search for the <code>&lt;af&gt;</code> element that logs the allocation failure trigger.</p>
<p>You can locate the concurrent scavenge partial cycle's concurrent increment by searching for <code>&lt;concurrent-start&gt;</code> and <code>&lt;concurrent-end&gt;</code>. The global cycle's intermediate concurrent increment, which can run at the same time, is not logged by an element, but begins immediately after application threads are restarted following the <code>&lt;cycle-start type="global"/&gt;</code> element. For more information about the global cycle's intermediate concurrent increment, see <a href="./#gencon-global-gc-cycle"><code>gencon</code> global GC cycle</a>. For more information about GC increments, see <a href="../vgclog/#gc-increments-and-interleaving">GC increments and interleaving</a>.</p>
<h3 id="gencon-global-gc-cycle"><code>gencon</code> global GC cycle</h3>
<p>The following example shows how a global GC cycle is recorded in a <code>gencon</code> policy verbose GC log. The output is broken down into sections with supporting text to explain the GC processing that is taking place.</p>
<p>The global GC cycle runs when the tenure area is close to full, which typically occurs after many partial cycles. As such, the output can be found part way down a full log. For more information about the GC initialization section, see <a href="../vgclog/#initialization">Initialization </a>. For an example log output for a <code>gencon</code> partial cycle, see <a href="#scavenge-partial-gc-cycle">Scavenge partial GC cycle</a>.</p>
<p>The global GC cycle is split into three increments, as shown in <a href="../vgclog/#gc-increments-and-interleaving">GC increments and interleaving</a>. Splitting the cycle operations into the following increments reduces pause times by running the majority of the GC work concurrently. The concurrent increment pauses when a partial GC cycle is triggered and resumes after the partial cycle, or multiple cycles, finish. The interleaving of partial GC cycles with the global cycle's intermediate concurrent increment can be seen in the following <code>gencon</code> global GC cycle log output. A single partial GC cycle is logged between the initial and final increments of the global cycle.</p>
<p>To search for a global cycle, you can search for the <code>type</code> attribute value <code>global</code> in <code>cycle-start</code> and <code>cycle-end</code> elements, or search for the element that logs the initial concurrent increment, <code>&lt;concurrent-kickoff&gt;</code>.</p>
<p>The following elements log the GC increments and operations of the global GC cycle:</p>
<p><table style="width:100%">
<caption>Table showing the <code>gencon</code> global cycle's GC increment and corresponding XML elements.</caption>
<thead>
<tr>
<th align="center" scope="col">GC operation</th>
<th align="center" scope="col">GC increment</th>
<th align="center" scope="col">STW or concurrent</th>
<th align="center" scope="col">XML element of GC increment</th>
<th align="center" scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" scope="row"> n/a - initiates cycle</td>
<td align="center">initial</td>
<td align="center">STW</td>
<td align="center"><code>&lt;concurrent-kickoff&gt;</code></td>
<td align="center">No <code>&lt;gc-op&gt;</code> is logged. This increment just initiates the concurrent mark increment.</td>
<td></code></td>
</tr>
<tr>
<td align="center" scope="row"> concurrent mark</td>
<td align="center">intermediate </code></td>
<td align="center">concurrent</code></td>
<td align="center">none</td>
<td><code>&lt;concurrent-trace-info&gt;</code> records the progress of the concurrent mark increment.</td>
</tr>
<tr>
<td align="center" scope="row"> final collection</td>
<td align="center">final</code></td>
<td align="center">STW </code></td>
<td align="center"><code>&lt;concurrent-global-final&gt;</code></td>
<td>The increment is typically triggered when a card cleaning threshold is reached. The completion of a tracing phase can also trigger the increment. Operations include a final concurrent mark, a sweep, and an optional class unload and compact.</td>
</tr>
</tbody>
</table></p>
<p>The global GC cycle follows a general structure in the verbose GC log. Some child elements are omitted for clarity. Multiple partial GC cycles can start and finish between the start and end of a global GC cycle. In the following example, the structure includes a single partial GC cycle within the global cycle:</p>
<pre><code class="xml">
&lt;concurrent-kickoff/&gt; (global cycle 1st increment recorded)
&lt;exclusive-start/&gt; (STW pause starts)
&lt;cycle-start/&gt; (global cycle starts)
&lt;exclusive-end/&gt; (STW pause ends)
(mutator threads running, global cycle concurrent increment running concurrently)
&lt;exclusive-start/&gt; (STW for partial GC cycle starts)
... (partial GC cycle starts and completes)
&lt;exclusive-end/&gt; (STW for partial GC cycle ends)
(mutator threads running, global cycle concurrent increment running concurrently)
&lt;exclusive-start/&gt; (STW pause starts)
&lt;concurrent-global-final/&gt; (global cycle final increment recorded)
&lt;gc-start/&gt; (global cycle final increment starts)
&lt;allocation-stats/&gt; (Snapshot of how memory was divided up between
... application threads before current cycle started)
&lt;mem-info&gt; (memory status before operations)
&lt;mem&gt;&lt;/mem&gt; (status of different areas of heap)
&lt;/mem-info&gt;
&lt;/gc-start&gt;
&lt;gc-op&gt; “type=rs-scan&quot;&lt;/gc-op&gt; (remembered set scan completed)
&lt;gc-op&gt;”type=card-cleaning&quot; &lt;/gc-op&gt; (card cleaning completed)
&lt;gc-op&gt; “type=mark”&lt;/gc-op&gt; (final mark operation and weak roots processing completed)
&lt;gc-op&gt; “type=classunload”&lt;/gc-op&gt; (class unload operation completed)
&lt;gc-op ”type=sweep” /&gt; (sweep operation completed)
&lt;gc-end&gt; (global cycle final increment ends)
&lt;mem-info&gt; (memory status after operations)
&lt;mem&gt;&lt;/mem&gt; (status of different areas of heap)
&lt;/mem-info&gt;
&lt;/gc-end&gt;
&lt;/cycle-end&gt; (global cycle ends)
&lt;exclusive-end&gt; (STW pause ends)
&lt;exclusive-start&gt; (STW pause starts)
...
</code></pre>
<p>The first activity in the cycle is recorded by a <code>&lt;concurrent-kickoff&gt;</code> element, which records the start of the first of three increments that make up a <code>gencon</code> global GC cycle. The <code>&lt;concurrent-kickoff&gt;</code> element records the following information:</p>
<ul>
<li>The reason why the GC cycle was triggered. For a <code>gencon</code> global cycle, the cycle is triggered when the amount of free memory decreases to a threshold value, the <code>thresholdFreeBytes</code> value.</li>
<li>The target number of bytes, <code>targetBytes</code>, that the cycle aims to mark concurrently.</li>
<li>The current available memory in the different parts of the heap.</li>
</ul>
<pre><code class="xml">&lt;concurrent-kickoff id=&quot;12362&quot; timestamp=&quot;2020-10-18T13:35:44.341&quot;&gt;
&lt;kickoff reason=&quot;threshold reached&quot; targetBytes=&quot;239014924&quot; thresholdFreeBytes=&quot;33024922&quot; remainingFree=&quot;32933776&quot; tenureFreeBytes=&quot;42439200&quot; nurseryFreeBytes=&quot;32933776&quot; /&gt;
&lt;/concurrent-kickoff&gt;
</code></pre>
<p>For this example, the <code>remainingFree</code> bytes value of 31.4 MB (32,933,776B) is approaching the <code>thresholdFreeBytes</code> value of 31.5 MB (33,024,922B) so a global cycle is triggered. </p>
<p>This cycle aims to trace 228 MB (239,014,924B) during the concurrent increment. If the concurrent increment is interrupted by a card cleaning threshold value before it traces all 228 MB, the final STW increment completes the tracing during the STW pause.</p>
<p><span aria-hidden="true" class="twemoji note"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"/></svg></span> <strong>Note:</strong> To analyze specific parts of a cycle, you can search for the elements that mark a specific increment of the cycle. For example, you can search for the <concurrent-global-final> element to locate the final increment of the <code>gencon</code> global cycle. See the details of a particular cycle, such as the <a href="./#gencon-global-gc-cycle"><code>gencon</code> global GC cycle</a>, to determine the element names for particular STW or concurrent GC increments or operations.</p>
<p>The next element recorded in the log, the <code>&lt;exclusive-start&gt;</code>element, records the start of an STW pause:</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;12363&quot; timestamp=&quot;2020-10-18T13:35:44.344&quot; intervalms=&quot;342.152&quot;&gt;
&lt;response-info timems=&quot;0.135&quot; idlems=&quot;0.068&quot; threads=&quot;3&quot; lastid=&quot;00000000015DE600&quot; lastname=&quot;LargeThreadPool-thread-24&quot; /&gt;
&lt;/exclusive-start&gt;
</code></pre>
<p>The following <code>&lt;gc-start&gt;</code> element records details of the start of a new cycle.</p>
<pre><code class="xml">&lt;cycle-start id=&quot;12364&quot; type=&quot;global&quot; contextid=&quot;0&quot; timestamp=&quot;2020-10-18T13:35:44.344&quot; intervalms=&quot;516655.052&quot; /&gt;
</code></pre>
<p>The <code>type</code> attribute records the cycle as a global cycle. The <code>contextid</code> of the cycle is, which indicates that all GC events that are associated with this cycle are tagged in relation to the <code>id</code> of this cycle. In particular, all subsequent elements that are associated with this particular example cycle have a <code>contextid</code> value equal to the <code>&lt;cycle-start&gt;</code> <code>id</code> attribute value of <code>“12634”</code>.</p>
<p>The next element in the log is <code>&lt;exclusive-end&gt;</code>, which records the end of the STW pause:</p>
<pre><code class="xml">&lt;exclusive-end id=&quot;12365&quot; timestamp=&quot;2020-10-18T13:35:44.344&quot; durationms=&quot;0.048&quot; /&gt;
</code></pre>
<p>The operations and suboperations of the second increment of the <code>gencon</code> global cycle are now running concurrently.</p>
<!--A blank line appears in the log after this `<exclusive-end>` line and before the next section, which tells you that no STW activities are running. However, concurrent activities might be running. In this case, the concurrent operations and sub-operations of the second increment of the `gencon` global cycle are running.-->
<p>The next section of the logs records an STW pause that is associated with an allocation failure. The <code>&lt;cycle-start&gt;</code> element that follows this STW pause indicates that the cycle is a <code>scavenge</code> cycle, which is the partial GC cycle that is used by the <code>gencon</code> GC:</p>
<pre><code class="xml">...
&lt;cycle-start id=&quot;12368&quot; type=&quot;scavenge&quot; contextid=&quot;0&quot; timestamp=&quot;2020-10-18T13:35:44.582&quot; intervalms=&quot;580.047&quot; /&gt;
...
</code></pre>
<p>Subsequent elements have a <code>contextid=“12368”</code>, which matches the <code>id</code> of this new <code>scavenge</code>cycle. For more information about how this cycle is recorded in the logs, see <a href="#scavenge-partial-gc-cycle">Scavenge partial GC cycle</a>.</p>
<p>The operations and suboperations of the second, concurrent increment of the <code>gencon</code> global cycle are paused while the STW <code>scavenge</code> operation is running, and resume when the STW pause finishes.</p>
<p>After the partial GC cycle completes and the STW pause finishes, the log records a new STW pause, which is triggered to enable the final <code>gencon</code> global GC increment to run. This final increment finishes marking the nursery area and completes the global cycle. The <code>&lt;exclusive-start&gt;</code> element is followed by a <code>&lt;concurrent-global-final&gt;</code> element, which logs the beginning of this final increment (and by implication, the end of the second increment).</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;12378&quot; timestamp=&quot;2020-10-18T13:35:44.594&quot; intervalms=&quot;12.075&quot;&gt;
&lt;response-info timems=&quot;0.108&quot; idlems=&quot;0.040&quot; threads=&quot;3&quot; lastid=&quot;00000000018D3800&quot; lastname=&quot;LargeThreadPool-thread-33&quot; /&gt;
&lt;/exclusive-start&gt;
&lt;concurrent-global-final id=&quot;12379&quot; timestamp=&quot;2020-10-18T13:35:44.594&quot; intervalms=&quot;516905.029&quot; &gt;
&lt;concurrent-trace-info reason=&quot;card cleaning threshold reached&quot; tracedByMutators=&quot;200087048&quot; tracedByHelpers=&quot;12164180&quot; cardsCleaned=&quot;4966&quot; workStackOverflowCount=&quot;0&quot; /&gt;
&lt;/concurrent-global-final&gt;
</code></pre>
<p>The <code>reason</code> attribute of the <code>&lt;concurrent-trace-info&gt;</code> child element indicates that this final STW increment of the global cycle was triggered because a card-cleaning threshold was reached. The concurrent tracing was stopped prematurely and the <code>targetBytes</code> concurrent tracing target, recorded at the cycle start by <code>&lt;concurrent-kickoff&gt;</code>, was not achieved concurrently. If the concurrent tracing completes without interruption, the <code>&lt;concurrent-trace-info</code> element logs <code>reason=tracing completed</code>. </p>
<p>In the next section that begins with the <code>gc-start</code> element, you can find information about the amount of memory available (<code>&lt;mem-info&gt;</code>) and where it is located in the java object heap. This snapshot is taken before the final increment's operations and suboperations are run and can be compared with a similar snapshot that is taken afterward to understand the effect on the heap. The child element attribute values of the<code>&lt;mem&gt;</code> and <code>&lt;mem-info&gt;</code> elements indicate the status of the memory.</p>
<p><span aria-hidden="true" class="twemoji note"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"/></svg></span> <strong>Note:</strong> You can double check that the increment is associated with the GC global cycle in the example by checking the <code>contextid</code> attribute value matches the <code>id=12364</code> attribute value of the cycle's <gc-cycle> element.</p>
<pre><code class="xml">&lt;gc-start id=&quot;12380&quot; type=&quot;global&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.594&quot;&gt;
&lt;mem-info id=&quot;12381&quot; free=&quot;277048640&quot; total=&quot;1073741824&quot; percent=&quot;25&quot;&gt;
&lt;mem type=&quot;nursery&quot; free=&quot;234609440&quot; total=&quot;268435456&quot; percent=&quot;87&quot;&gt;
&lt;mem type=&quot;allocate&quot; free=&quot;234609440&quot; total=&quot;241565696&quot; percent=&quot;97&quot; /&gt;
&lt;mem type=&quot;survivor&quot; free=&quot;0&quot; total=&quot;26869760&quot; percent=&quot;0&quot; /&gt;
&lt;/mem&gt;
&lt;mem type=&quot;tenure&quot; free=&quot;42439200&quot; total=&quot;805306368&quot; percent=&quot;5&quot;&gt;
&lt;mem type=&quot;soa&quot; free=&quot;2173472&quot; total=&quot;765040640&quot; percent=&quot;0&quot; /&gt;
&lt;mem type=&quot;loa&quot; free=&quot;40265728&quot; total=&quot;40265728&quot; percent=&quot;100&quot; /&gt;
&lt;/mem&gt;
&lt;pending-finalizers system=&quot;0&quot; default=&quot;0&quot; reference=&quot;405&quot; classloader=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;17388&quot; /&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
&lt;allocation-stats totalBytes=&quot;827488&quot; &gt;
&lt;allocated-bytes non-tlh=&quot;96&quot; tlh=&quot;827392&quot; /&gt;
&lt;largest-consumer threadName=&quot;LargeThreadPool-thread-68&quot; threadId=&quot;00000000013D6900&quot; bytes=&quot;65632&quot; /&gt;
&lt;/allocation-stats&gt;
</code></pre>
<p>The next element <code>&lt;allocation-stats&gt;</code> shows a snapshot of how memory was divided up between application threads before the current cycle started. In this example, the thread that used the most memory was <code>LargeThreadPool-thread-68</code>.</p>
<p>For this example, at the start of this GC increment, the tenure area is low on free memory, as expected. 25% of the total heap is available as free memory, which is split between the following areas of the heap:</p>
<ul>
<li>The nursery area, which has 223.7 MB (234,609,440B) of free memory available. The free memory is only available in the allocate space of the nursery area. The survivor space of the nursery area is reported as 'full' to reflect that no available memory is available to allocate to the mutator threads. The entire survivor space is reserved for GC operations during the GC increment.</li>
<li>The tenure area, which has 40.5 MB (42,439,200B) available as free memory, which is only 5% of its total memory. Most of this free memory is in the large object area (LOA). Almost no free memory is available in the small object area (SOA).</li>
</ul>
<p>The <code>&lt;gc-op&gt;</code> elements and their child elements contain information about the operations and suboperations in the increment. The final increment of the <code>gencon</code> global cycle consists of multiple operations, each logged with a <code>&lt;gc-op&gt;</code> element. The type of operation is shown by the <code>&lt;gc-op&gt;</code> <code>type</code> attribute. The final increment of the example log runs five types of operation:</p>
<ol>
<li><code>rs-scan</code></li>
<li><code>card-cleaning</code></li>
<li><code>mark</code></li>
<li><code>classunload</code></li>
<li><code>sweep</code></li>
</ol>
<p><span aria-hidden="true" class="twemoji note"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"/></svg></span> <strong>Note:</strong> The final increment of a <code>gencon</code> global cycle can include an optional <code>compact</code> suboperation.</p>
<p>For more information about the different types of GC operation, see <a href="../gc_overview/#gc-operations">GC operations</a>.</p>
<pre><code class="xml">&lt;gc-op id=&quot;12382&quot; type=&quot;rs-scan&quot; timems=&quot;3.525&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.598&quot;&gt;
&lt;scan objectsFound=&quot;11895&quot; bytesTraced=&quot;5537600&quot; workStackOverflowCount=&quot;0&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;12383&quot; type=&quot;card-cleaning&quot; timems=&quot;2.910&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.601&quot;&gt;
&lt;card-cleaning cardsCleaned=&quot;3603&quot; bytesTraced=&quot;5808348&quot; workStackOverflowCount=&quot;0&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;12384&quot; type=&quot;mark&quot; timems=&quot;6.495&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.607&quot;&gt;
&lt;trace-info objectcount=&quot;1936&quot; scancount=&quot;1698&quot; scanbytes=&quot;61200&quot; /&gt;
&lt;finalization candidates=&quot;389&quot; enqueued=&quot;1&quot; /&gt;
&lt;ownableSynchronizers candidates=&quot;5076&quot; cleared=&quot;523&quot; /&gt;
&lt;references type=&quot;soft&quot; candidates=&quot;18420&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; dynamicThreshold=&quot;32&quot; maxThreshold=&quot;32&quot; /&gt;
&lt;references type=&quot;weak&quot; candidates=&quot;19920&quot; cleared=&quot;114&quot; enqueued=&quot;60&quot; /&gt;
&lt;references type=&quot;phantom&quot; candidates=&quot;671&quot; cleared=&quot;50&quot; enqueued=&quot;50&quot; /&gt;
&lt;stringconstants candidates=&quot;40956&quot; cleared=&quot;109&quot; /&gt;
&lt;object-monitors candidates=&quot;182&quot; cleared=&quot;51&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;12385&quot; type=&quot;classunload&quot; timems=&quot;1.607&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.609&quot;&gt;
&lt;classunload-info classloadercandidates=&quot;425&quot; classloadersunloaded=&quot;6&quot; classesunloaded=&quot;2&quot; anonymousclassesunloaded=&quot;1&quot; quiescems=&quot;0.000&quot; setupms=&quot;1.581&quot; scanms=&quot;0.019&quot; postms=&quot;0.007&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;12386&quot; type=&quot;sweep&quot; timems=&quot;9.464&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.618&quot; /&gt;
</code></pre>
<p>The end of the increment is recorded with <code>&lt;gc-end&gt;</code> and provides another snapshot of memory in the heap, similar to <code>&lt;gc-start&gt;</code>.</p>
<pre><code class="xml">&lt;gc-end id=&quot;12387&quot; type=&quot;global&quot; contextid=&quot;12364&quot; durationms=&quot;24.220&quot; usertimems=&quot;86.465&quot; systemtimems=&quot;0.000&quot; stalltimems=&quot;2.846&quot; timestamp=&quot;2020-10-18T13:35:44.618&quot; activeThreads=&quot;4&quot;&gt;
&lt;mem-info id=&quot;12388&quot; free=&quot;650476504&quot; total=&quot;1073741824&quot; percent=&quot;60&quot;&gt;
&lt;mem type=&quot;nursery&quot; free=&quot;235516088&quot; total=&quot;268435456&quot; percent=&quot;87&quot;&gt;
&lt;mem type=&quot;allocate&quot; free=&quot;235516088&quot; total=&quot;241565696&quot; percent=&quot;97&quot; /&gt;
&lt;mem type=&quot;survivor&quot; free=&quot;0&quot; total=&quot;26869760&quot; percent=&quot;0&quot; /&gt;
&lt;/mem&gt;
&lt;mem type=&quot;tenure&quot; free=&quot;414960416&quot; total=&quot;805306368&quot; percent=&quot;51&quot; micro-fragmented=&quot;98245682&quot; macro-fragmented=&quot;0&quot;&gt;
&lt;mem type=&quot;soa&quot; free=&quot;374694688&quot; total=&quot;765040640&quot; percent=&quot;48&quot; /&gt;
&lt;mem type=&quot;loa&quot; free=&quot;40265728&quot; total=&quot;40265728&quot; percent=&quot;100&quot; /&gt;
&lt;/mem&gt;
&lt;pending-finalizers system=&quot;1&quot; default=&quot;0&quot; reference=&quot;515&quot; classloader=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;13554&quot; /&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>60% of the heap now contains free memory as a result of the final global cycle increment, which is split between the following areas of the heap:</p>
<ul>
<li>The nursery area, which gained 0.9 MB of free memory. The nursery area now has 224.6 MB (235,516,088B) available as free memory. At the start of the final increment, the nursery area had 223.7 MB (234,609,440B) of free memory available.</li>
<li>The tenure area, which gained 355.2 MB (372,521,216B) of free memory. (the tenure area now has 395.7 MB (414,960,416B) available as free memory. At the start of the final increment, the tenure area had 40.5 MB (42,439,200B) of free memory available).</li>
</ul>
<p><span aria-hidden="true" class="twemoji note"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"/></svg></span> <strong>Note:</strong> The global GC cycle runs to reclaim memory in the tenure area. The freeing up of memory in the nursery area is achieved by using the partial GC cycle. For more information, see <a href="../gc/#gencon-policy-default"><code>gencon</code> policy (default)</a>.</p>
<p>After the final increment of the global cycle completes, the global cycle ends and the STW pause ends, as shown in the following output:</p>
<pre><code class="xml">&lt;cycle-end id=&quot;12389&quot; type=&quot;global&quot; contextid=&quot;12364&quot; timestamp=&quot;2020-10-18T13:35:44.619&quot; /&gt;
&lt;exclusive-end id=&quot;12391&quot; timestamp=&quot;2020-10-18T13:35:44.619&quot; durationms=&quot;24.679&quot; /&gt;
</code></pre>
<h4 id="summary_1">Summary</h4>
<p>Analyzing the structure and elements of this example log output shows that this example global cycle has the following characteristics:</p>
<ul>
<li>
<p>The GC global cycle is triggered when a memory threshold is reached and begins with an STW pause.</p>
</li>
<li>
<p>After the first increment of the GC global cycle completes, the STW pause ends and the second increment runs concurrently.</p>
</li>
<li>
<p>A single partial GC cycle starts and finishes between the start and end of the concurrent increment.</p>
</li>
<li>
<p>An STW pause begins after the concurrent increments completes, during which the third and final increment of the global cycle, which consists of five operations, runs.</p>
</li>
<li>
<p>The global GC cycle reclaims memory in the tenure area and a small amount of memory in the nursery area.</p>
</li>
</ul>
<h2 id="balanced-examples"><code>balanced</code> examples</h2>
<p>The <a href="../gc/#balanced-policy"><code>balanced</code></a> policy (<code>-Xgcpolicy:balanced</code>) uses two types of cycle to perform GC; a partial GC cycle and a global GC <em>mark</em> cycle. The policy might also run a third type of cycle, which is a global cycle, to reclaim memory after an allocation failure that results from tight memory conditions.</p>
<p>For more information about the cycles used in a particular policy, see <a href="../gc/#garbage-collection-policies">GC policies</a>.</p>
<p>The start of a <code>balanced</code> cycle is recorded in the log by the following elements and attributes:</p>
<table style="width:100%" align="center">
<caption>Table showing types of <code>balanced</code> cycle, the corresponding trigger, and XML elements for each `type`. </caption>
<thead>
<tr>
<th scope="col">GC cycle or increment</th>
<th align="center" scope="col">Value of <code>type</code> attribute of the cycle or increment elements</th>
<th align="center"scope="col">Element that logs the cycle trigger</th>
<th scope="col">Trigger reason</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> partial cycle</td>
<td align="center"><code>partial gc</code> </td>
<td align="center"><code>&lt;allocation-taxation&gt;</code></td>
<td>Allocation taxation threshold reached.</td>
</tr>
<tr>
<td scope="row">global mark cycle</td>
<td align="center"> <code>global mark phase</code></td>
<td align="center"><code>&lt;allocation-taxation&gt;</code></td>
<td>Allocation taxation threshold reached.</td>
<tr>
<tr>
<td scope="row">global mark STW subincrement of global mark cycle</td>
<td align="center"> <code>mark increment</code></td>
<td align="center">n/a</td>
<td>Allocation taxation threshold reached</td>
<tr>
<tr>
<td scope="row">global mark concurrent subincrement of global mark cycle</td>
<td align="center"> <code>GMP work packet processing</code></td>
<td align="center">n/a</td>
<td>Allocation taxation threshold reached</td>
<tr>
<tr>
<td scope="row">global cycle</td>
<td align="center"><code>global garbage collect</code></td>
<td align="center"><code>&lt;af-start&gt;</code> (or <code>&lt;sys-start reason="explicit"&gt;</code> if triggered explicitly)</td>
<td>Allocation failure. Occurs under tight memory conditions. Cycle runs rarely.</td>
<tr>
</tbody>
</table>
<p>To locate a particular type of cycle, you can search for the <code>type</code> attribute of the <code>&lt;cycle-start&gt;</code> and <code>&lt;cycle-end&gt;</code> elements.</p>
<p>When memory in the Java object heap reaches a memory threshold, called an <em>allocation taxation</em> threshold, a <code>balanced</code> partial GC cycle, <code>balanced</code> global mark cycle, or <code>balanced</code> global mark cycle increment, is triggered. If the available memory in the heap is low, the GC triggers a <code>balanced</code> global mark cycle, or a global mark cycle increment if the global mark cycle is in progress. Otherwise, the GC triggers a partial cycle.</p>
<p>Partial GC cycles, global mark cycles, and global GC cycles set the allocation taxation threshold at the end of their cycle or increment to schedule the next cycle or increment. For <code>balanced</code> cycles, the taxation on the mutator threads refers to pausing the mutator threads while GC work is run.</p>
<p>When a partial cycle ends, if the cycle is not run between global mark phase increments of a global mark cycle, and a global mark cycle is not scheduled as the next cycle, the allocation taxation threshold is set to trigger the next partial cycle when the <em>eden</em> space is full. Specifically, the allocation threshold is set to be equal to the size of the eden space.</p>
<p>If a partial cycle runs within a global mark cycle, or if a global mark cycle is scheduled as the next cycle, the allocation taxation threshold, set at the end of the partial cycle, is set to be smaller than the size of the eden space. Specifically, the allocation taxation threshold is set to be half the size of the eden space so that the next global mark cycle or global mark cycle increment has enough memory available in the eden space to run.</p>
<p>For more information about GC increments, see <a href="../vgclog/#gc-increments-and-interleaving">GC increments and interleaving</a>.</p>
<p>You can analyze the increments and operations that are associated with a particular type of cycle by locating and interpreting the elements in the following table:</p>
<table style="width:100%" align="center">
<caption>Table showing increments and operations that are associated with the <code>balanced</code> partial and global mark cycles</caption>
<thead>
<tr>
<th scope="col">GC process</th>
<th align="center" scope="col">Elements that log the start and end of the event></th>
<th>Details</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> GC cycle</td>
<td align="center"><code>&lt;cycle-start&gt;</code>,<code>&lt;cycle-end&gt;</code></td>
<td>The start and end of a GC cycle</td>
</tr>
<tr>
<td scope="row"> GC STW increment</td>
<td align="center"> <code>&lt;gc-start&gt;</code><code>&lt;gc-end&gt;</code></td>
<td>The start and end of a GC increment or subincrement that begins with a STW pause. For example, a <code>global mark phase</code> global mark GC cycle increment or a partial GC cycle increment</td>
<tr>
<tr>
<td scope="row"> GC concurrent increment</td>
<td align="center"> <code>&lt;concurrent-start&gt;</code>, <code>&lt;concurrent-end&gt;</code></td>
<td>The start of the concurrent <i>global mark phase work packet processing</i> subincrements of the global mark cycle</td>
<tr>
<tr>
<td scope="row"> GC operations and phases</td>
<td align="center"> <code>&lt;gc-op&gt;</code></td>
<td>A GC operation such as mark or sweep, or a suboperation such as class unload.</td>
<tr>
</tbody>
</table>
<p>For more information about the XML structure of GC cycles, see <a href="../vgclog/#gc-cycles">GC cycles</a>.</p>
<p>The following sections use log excerpts to show how the different GC processes are logged.</p>
<h3 id="balanced-partial-gc-cycle"><code>balanced</code> partial GC cycle</h3>
<p>The following example is taken from a <code>balanced</code> policy verbose GC log. The output is broken down into sections to explain the GC processing that is taking place.</p>
<p>To search for a <code>balanced</code> partial GC cycle, you can search for the <code>type</code> attribute value <code>partial gc</code> in <code>&lt;cycle-start&gt;</code> and <code>&lt;cycle-end&gt;</code> elements.</p>
<p>The partial GC cycle reclaims memory in the heap for the allocation of new objects by reducing the number of used regions. The partial GC cycle always reduces used regions in the eden space and might also reclaim memory from older regions. Multiple partial GC cycles often run in between global mark phase increments of the <a href="./#balanced-global-mark-gc-cycle"><code>balanced</code> global mark GC cycle</a>. </p>
<p>All the operations in a partial GC cycle run during a single STW pause, as shown in the following table:</p>
<table style="width:100%" align="center">
<caption>Table showing the <code>balanced</code> partial GC cycle operation and corresponding XML elements.</caption>
<thead>
<tr>
<th align="center" scope="col">GC operation</th>
<th align="center" scope="col">GC increment</th>
<th align="center" scope="col">STW or concurrent</th>
<th align="center" scope="col">XML element of GC increment</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> copy forward, and optionally class unload, sweep, and compact</td>
<td align="center">single </code></td>
<td align="center">STW </code></td>
<td align="center"><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></td>
</tr>
</tbody>
</table>
<p>The following general structure shows a <code>balanced</code> partial GC cycle. Some child elements are omitted for clarity:</p>
<pre><code class="xml">&lt;exclusive-start/&gt; (STW pause starts)
&lt;allocation-taxation/&gt; (memory threshold trigger recorded)
&lt;cycle-start/&gt; (partial cycle starts)
&lt;gc-start/&gt; (partial cycle increment starts)
&lt;mem-info&gt; (memory status before operations)
&lt;mem&gt;&lt;/mem&gt; (status of different types of memory)
&lt;/mem-info&gt;
&lt;/gc-start&gt;
&lt;allocation-stats/&gt; (Snapshot of how memory was divided up between
... application threads before current cycle started)
&lt;gc-op&gt; type=&quot;copy forward&quot; &lt;/gc-op&gt; (copy forward operation completed)
&lt;gc-op&gt; type=&quot;class unload&quot; &lt;/gc-op&gt; (class unload operation completed)
&lt;gc-op&gt; type=&quot;sweep&quot; &lt;/gc-op&gt; (sweep operation completed)
&lt;gc-op&gt; type=&quot;compact&quot; &lt;/gc-op&gt; (compact operation completed)
&lt;gc-end&gt; (partial cycle increment ends)
&lt;mem-info&gt; (memory status after operations)
&lt;mem&gt;&lt;/mem&gt; (status of different types of memory)
&lt;/mem-info&gt;
&lt;/gc-end&gt;
&lt;cycle-end&gt; (partial cycle ends)
&lt;exclusive-end&gt; (STW pause ends)
</code></pre>
<p>When the <code>balanced</code> partial GC cycle is triggered, the GC runs an STW pause. Application (or <em>mutator</em>) threads are halted to give the garbage collector exclusive access to the heap. The STW pause is recorded in the logs by the <code>&lt;exclusive-start&gt;</code> element.</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;184&quot; timestamp=&quot;2021-02-26T11:11:42.310&quot; intervalms=&quot;3745.790&quot;&gt;
&lt;response-info timems=&quot;3.138&quot; idlems=&quot;1.056&quot; threads=&quot;2&quot; lastid=&quot;00000000006EDE00&quot; lastname=&quot;RunDataWriter.1&quot; /&gt;
&lt;/exclusive-start&gt;
</code></pre>
<p>An allocation taxation threshold triggers a <code>balanced</code> partial GC cycle. The logs record this trigger reason by using the<code>&lt;allocation-taxation&gt;</code> element.</p>
<pre><code class="xml">&lt;allocation-taxation id=&quot;185&quot; taxation-threshold=&quot;2147483648&quot; timestamp=&quot;2021-02-26T11:11:42.311&quot; intervalms=&quot;3745.785&quot; /&gt;
</code></pre>
<p>Details about the start of the cycle are recorded by the <code>&lt;cycle-start&gt;</code> element. The cycle is recorded as a <code>partial gc</code> with an <code>id=336</code>. Any subsequent elements that are associated with this cycle have a <code>contextid=186</code> to match the cycle <code>id</code>. You can use this <code>contextid</code> value to distinguish the partial GC cycle increment and operations from interleaving increments and operations of other <code>balanced</code> cycles, such as global mark cycles.</p>
<pre><code class="xml">&lt;cycle-start id=&quot;186&quot; type=&quot;partial gc&quot; contextid=&quot;0&quot; timestamp=&quot;2021-02-26T11:11:42.311&quot; intervalms=&quot;3745.805&quot; /&gt;
</code></pre>
<p>The partial cycle begins its only GC increment, recorded by using the <code>&lt;gc-start&gt;</code> element. You can understand the effect that the increment operations have on the heap by comparing snapshots of the memory that are taken at the start and the end of the increment. The child elements <code>&lt;mem-info&gt;</code> and <code>&lt;mem&gt;</code> of the <code>&lt;gc-start&gt;</code> and <code>&lt;gc-end&gt;</code> elements record the amount of memory available and where it is located in the heap.</p>
<pre><code class="xml">&lt;gc-start id=&quot;187&quot; type=&quot;partial gc&quot; contextid=&quot;186&quot; timestamp=&quot;2021-02-26T11:11:42.311&quot;&gt;
&lt;mem-info id=&quot;188&quot; free=&quot;897581056&quot; total=&quot;4294967296&quot; percent=&quot;20&quot;&gt;
&lt;mem type=&quot;eden&quot; free=&quot;0&quot; total=&quot;2147483648&quot; percent=&quot;0&quot; /&gt;
&lt;arraylet-primitive objects=&quot;1&quot; leaves=&quot;4&quot; largest=&quot;4&quot; /&gt;
&lt;remembered-set count=&quot;2749664&quot; freebytes=&quot;160705664&quot; totalbytes=&quot;171704320&quot; percent=&quot;93&quot; regionsoverflowed=&quot;1&quot; regionsstable=&quot;12&quot; regionsrebuilding=&quot;0&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
</code></pre>
<p>As expected, at the start of this increment, the eden regions are full. 856 MB (897,581,056 B) of the total 4096 MB (4294,967,296 B) heap, equivalent to 20% of the heap, is available as free memory.</p>
<p>The status of the <em>remembered set</em>, a metastructure specific to OpenJ9 generational garbage collectors, is reported by the <code>&lt;remembered-set&gt;</code> element. The remembered set metastructure keeps a record of any object references that cross different regions. Each region corresponds to a single remembered set.</p>
<p>The partial GC cycle uses and prunes the remembered set. The <code>regionsoverflowed</code> value records the number of regions that exceeded the non-object heap memory allocation that is reserved for the remembered set. The partial GC cycle cannot reclaim memory from these overflow regions. The partial GC cycle also cannot reclaim memory from any regions whose remembered set is being rebuilt by an increment of a global mark cycle that is in progress.</p>
<p>At the start of the partial GC cycle, the remembered set is using 93% of its available memory capacity, with 153.26 MB (160705664 B) available. The set consists of 2,749,664 cards and has one overflow region.</p>
<p>The following element, <code>&lt;allocation-stats&gt;</code>, records information about how memory was divided between application (or <em>mutator</em>) threads before the start of the current cycle. For this example, the thread <code>Group1.Backend.CompositeBackend{Tier1}.7</code> was the largest consumer of memory.</p>
<pre><code class="xml">&lt;allocation-stats totalBytes=&quot;2146431360&quot; &gt;
&lt;allocated-bytes non-tlh=&quot;96417448&quot; tlh=&quot;2050013912&quot; arrayletleaf=&quot;0&quot;/&gt;
&lt;largest-consumer threadName=&quot;Group1.Backend.CompositeBackend{Tier1}.7&quot; threadId=&quot;00000000007E9300&quot; bytes=&quot;275750048&quot; /&gt;
&lt;/allocation-stats&gt;
</code></pre>
<p>The operations of the GC increment are run and details are recorded in the <code>&lt;gc-op&gt;</code> elements. The logs show that this increment begins with a copy forward operation followed by a class unload. Other <code>balanced</code> partial GC cycles can also include sweep and compact operations. For more information about the operations involved in <code>balanced</code> partial GC cycles, see <a href="../gc/#gc-processing_1">GC Processing</a>.</p>
<pre><code class="xml">&lt;gc-op id=&quot;189&quot; type=&quot;copy forward&quot; timems=&quot;400.637&quot; contextid=&quot;186&quot; timestamp=&quot;2021-02-26T11:11:42.713&quot;&gt;
&lt;memory-copied type=&quot;eden&quot; objects=&quot;4434622&quot; bytes=&quot;119281928&quot; bytesdiscarded=&quot;1382272&quot; /&gt;
&lt;memory-copied type=&quot;other&quot; objects=&quot;8847813&quot; bytes=&quot;244414264&quot; bytesdiscarded=&quot;6243176&quot; /&gt;
&lt;memory-cardclean objects=&quot;1446970&quot; bytes=&quot;64143048&quot; /&gt;
&lt;regions eden=&quot;512&quot; other=&quot;80&quot; /&gt;
&lt;remembered-set-cleared processed=&quot;2435794&quot; cleared=&quot;887129&quot; durationms=&quot;8.667&quot; /&gt;
&lt;finalization candidates=&quot;66&quot; enqueued=&quot;56&quot; /&gt;
&lt;ownableSynchronizers candidates=&quot;256500&quot; cleared=&quot;78012&quot; /&gt;
&lt;references type=&quot;soft&quot; candidates=&quot;153648&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; dynamicThreshold=&quot;22&quot; maxThreshold=&quot;32&quot; /&gt;
&lt;references type=&quot;weak&quot; candidates=&quot;1266&quot; cleared=&quot;610&quot; enqueued=&quot;430&quot; /&gt;
&lt;stringconstants candidates=&quot;9479&quot; cleared=&quot;0&quot; /&gt;
&lt;object-monitors candidates=&quot;13576&quot; cleared=&quot;13505&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;190&quot; type=&quot;classunload&quot; timems=&quot;0.010&quot; contextid=&quot;186&quot; timestamp=&quot;2021-02-26T11:11:42.713&quot;&gt;
&lt;classunload-info classloadercandidates=&quot;179&quot; classloadersunloaded=&quot;0&quot; classesunloaded=&quot;0&quot; anonymousclassesunloaded=&quot;0&quot; quiescems=&quot;0.000&quot; setupms=&quot;0.010&quot; scanms=&quot;0.000&quot; postms=&quot;0.000&quot; /&gt;
&lt;/gc-op&gt;
</code></pre>
<p>The logs show that the copy forward operation acts on the entire eden space (512 regions), recorded as <code>type=eden</code>, and 80 older regions, which are recorded as <code>type=other</code>. 113.76 MB (119281928 B) of memory was copied from the eden space to 1st generation regions and 233.10 MB (244414264 B) of memory in non-eden regions was copied to the next generation of regions. The copy forward operation is followed by a class unload operation.</p>
<p>In some cases, a copy forward operation moves some regions by copying forward the objects in those regions, but only marks the objects in other regions. For example, the following log excerpt is taken from a different partial cycle, which corresponds to a <code>contextid</code> of <code>2049</code>. The copy forward operation in the following example involves marking some regions and copying forward other regions.</p>
<pre><code class="xml">&lt;gc-op id=&quot;2052&quot; type=&quot;copy forward&quot; timems=&quot;649.059&quot; contextid=&quot;2049&quot; timestamp=&quot;2021-02-26T11:22:34.901&quot;&gt;
&lt;memory-copied type=&quot;eden&quot; objects=&quot;95989&quot; bytes=&quot;7882704&quot; bytesdiscarded=&quot;501088&quot; /&gt;
&lt;memory-copied type=&quot;other&quot; objects=&quot;2955854&quot; bytes=&quot;86854064&quot; bytesdiscarded=&quot;626024&quot; /&gt;
&lt;memory-cardclean objects=&quot;1304&quot; bytes=&quot;56840&quot; /&gt;
&lt;memory-traced type=&quot;eden&quot; objects=&quot;23392785&quot; bytes=&quot;553756840&quot; /&gt;
&lt;memory-traced type=&quot;other&quot; objects=&quot;5461302&quot; bytes=&quot;131394216&quot; /&gt;
&lt;regions eden=&quot;488&quot; other=&quot;138&quot; /&gt;
&lt;remembered-set-cleared processed=&quot;156775&quot; cleared=&quot;4897&quot; durationms=&quot;1.759&quot; /&gt;
&lt;finalization candidates=&quot;31&quot; enqueued=&quot;12&quot; /&gt;
&lt;ownableSynchronizers candidates=&quot;1992467&quot; cleared=&quot;1600904&quot; /&gt;
&lt;references type=&quot;soft&quot; candidates=&quot;329190&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; dynamicThreshold=&quot;8&quot; maxThreshold=&quot;32&quot; /&gt;
&lt;references type=&quot;weak&quot; candidates=&quot;697&quot; cleared=&quot;105&quot; enqueued=&quot;6&quot; /&gt;
&lt;stringconstants candidates=&quot;9848&quot; cleared=&quot;0&quot; /&gt;
&lt;object-monitors candidates=&quot;1437&quot; cleared=&quot;1353&quot; /&gt;
&lt;heap-resize type=&quot;expand&quot; space=&quot;default&quot; amount=&quot;0&quot; count=&quot;1&quot; timems=&quot;0.000&quot; reason=&quot;continue current collection&quot; /&gt;
&lt;warning details=&quot;operation aborted due to insufficient free space&quot; /&gt;
&lt;/gc-op&gt;
</code></pre>
<p>The logs record these two concurrent parts of a copy forward operation in the <code>&lt;gc-op type="copy forward"&gt;</code> section by using a <code>&lt;memory-traced&gt;</code> child element. In addition,<code>evacuated</code> and <code>marked</code> attributes for the <code>&lt;regions&gt;</code> child element are used to distinguish between the number of regions that were copied-forward (recorded as <code>evacuated</code>) and the number of regions that were only marked and not copied-forward. For example, <code>&lt;regions eden="256" other="308" evacuated="308" marked="256" /&gt;</code>.</p>
<p>Returning to the <code>contextid=186</code> partial cycle example, the next element in the logs, <code>&lt;gc-end&gt;</code>, records the end of the increment and provides another snapshot of memory allocation on the heap, similar to <code>&lt;gc-start&gt;</code>.</p>
<pre><code class="xml">&lt;gc-end id=&quot;191&quot; type=&quot;partial gc&quot; contextid=&quot;186&quot; durationms=&quot;402.645&quot; usertimems=&quot;3157.520&quot; systemtimems=&quot;4.000&quot; stalltimems=&quot;47.689&quot; timestamp=&quot;2021-02-26T11:11:42.714&quot; activeThreads=&quot;8&quot;&gt;
&lt;mem-info id=&quot;192&quot; free=&quot;3003121664&quot; total=&quot;4294967296&quot; percent=&quot;69&quot;&gt;
&lt;mem type=&quot;eden&quot; free=&quot;2147483648&quot; total=&quot;2147483648&quot; percent=&quot;100&quot; /&gt;
&lt;arraylet-primitive objects=&quot;1&quot; leaves=&quot;4&quot; largest=&quot;4&quot; /&gt;
&lt;pending-finalizers system=&quot;56&quot; default=&quot;0&quot; reference=&quot;430&quot; classloader=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;2922048&quot; freebytes=&quot;160016128&quot; totalbytes=&quot;171704320&quot; percent=&quot;93&quot; regionsoverflowed=&quot;1&quot; regionsstable=&quot;12&quot; regionsrebuilding=&quot;0&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>The following information describes the heap memory allocation at the end of the increment:</p>
<ul>
<li>
<p>The heap now has 2864 MB (3,003,121,664 bytes) of memory available compared to the 856 MB available at the start of the increment. The increment reclaimed 2,008 MB of memory in the heap, which is slightly less than the size of the eden space, as is typically the case.</p>
</li>
<li>
<p>The eden space is recorded to have 100% memory available as free memory. The eden space, which consists of regions containing the youngest objects, was fully re-created by reclaiming almost all of the eden regions and assigning some other empty regions of the heap to the eden space. Note that some objects from eden regions always survive.</p>
</li>
<li>
<p>The remembered set count increased by 172,384 cards, and the number of free bytes in the remembered set decreased by 0.66 MB (689,536 B).</p>
</li>
</ul>
<p>The cycle completes and the GC restarts application threads.</p>
<pre><code class="xml">&lt;cycle-end id=&quot;193&quot; type=&quot;partial gc&quot; contextid=&quot;186&quot; timestamp=&quot;2021-02-26T11:11:42.714&quot; /&gt;
&lt;exclusive-end id=&quot;194&quot; timestamp=&quot;2021-02-26T11:11:42.714&quot; durationms=&quot;404.145&quot; /&gt;
</code></pre>
<p>The next cycle that is recorded in the logs is another partial GC cycle. The <code>&lt;gc-start&gt;</code>element records the following information:</p>
<pre><code class="xml">&lt;gc-start id=&quot;198&quot; type=&quot;partial gc&quot; contextid=&quot;197&quot; timestamp=&quot;2021-02-26T11:11:46.072&quot;&gt;
&lt;mem-info id=&quot;199&quot; free=&quot;855638016&quot; total=&quot;4294967296&quot; percent=&quot;19&quot;&gt;
&lt;mem type=&quot;eden&quot; free=&quot;0&quot; total=&quot;2147483648&quot; percent=&quot;0&quot; /&gt;
&lt;arraylet-primitive objects=&quot;1&quot; leaves=&quot;4&quot; largest=&quot;4&quot; /&gt;
&lt;remembered-set count=&quot;2922048&quot; freebytes=&quot;160016128&quot; totalbytes=&quot;171704320&quot; percent=&quot;93&quot; regionsoverflowed=&quot;1&quot; regionsstable=&quot;12&quot; regionsrebuilding=&quot;0&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
</code></pre>
<p>The <code>&lt;mem-info&gt;</code> element shows that the following events occurred in between the end of the last (partial) GC cycle and the start of this cycle:</p>
<ul>
<li>All available memory in the eden area was allocated to application threads.</li>
<li>Application threads also used some memory from non-eden heap areas. The total available memory in the heap reduced from 69% to 19%.</li>
<li>The remembered set status is unchanged, as shown by the <code>&lt;remembered-set&gt;</code> element. When mutator threads run, they build data about object references that cross boundaries by using a card table. However, the processing of card table data into the remembered set, and the reporting of the remembered set counts, are run during other cycle operations.</li>
</ul>
<h4 id="summary_2">Summary</h4>
<p>Analyzing the structure and elements of this example log output shows that this example <code>balanced</code> partial GC cycle has the following characteristics:</p>
<ul>
<li>The partial GC cycle is triggered when the eden space is full by an allocation taxation threshold.</li>
<li>All GC operations that are associated with this cycle occur during the STW pause.</li>
<li>The partial GC cycle consists of only one increment, which runs a copy forward operation on 512 eden regions and 80 other regions, followed by a class-unload operation.</li>
<li>The partial GC cycle re-creates a free eden space by reclaiming all possible regions from the eden space (some objects always survive) and assigning other free regions to the eden space. The GC cycle also reclaims memory from some other regions.</li>
<li>2864 MB of the total 4096 MB heap was reclaimed. 100% of the eden space is available as free memory, and some older regions were also reclaimed.</li>
<li>Between the start and end of the partial GC cycle, the remembered set count increases by 172,384 cards and the number of free bytes decreases by 0.66 MB (689,536 B). After performing a copy forward operation on objects to move them to older regions, the partial GC cycle rebuilds the remembered set of any regions that received these moved objects. During a partial cycle, the remembered set is also pruned. Overall, the rebuilding and pruning can lead to either an increase or a decrease in the remembered set count and free memory available.</li>
<li>The remembered set metastructure remains unchanged between GC cycles, even though the mutator threads build new data about object references when the threads run. The remembered set count is identical at the end of one partial GC cycle and the beginning of the next because the remembered set consumes this data and reports to the verbose GC logs only during a cycle's operation.</li>
</ul>
<h3 id="balanced-global-mark-gc-cycle"><code>balanced</code> global mark GC cycle</h3>
<p>The global mark GC cycle uses a mixture of STW and concurrent operations to build a new record of object liveness across the heap for use by the <code>balanced</code> partial GC cycle. The <code>balanced</code> GC runs a <code>balanced global mark cycle</code>, or a <code>balanced</code> global mark cycle increment if the global mark cycle is in progress, if the heap satisfies a low memory condition when the allocation taxation threshold is reached.</p>
<p>The global mark cycle runs a <a href="./#global-mark-phase">global mark phase</a> and also triggers an associated <a href="./#sweep-phase"><em>sweep</em> phase</a> within the partial GC cycle that immediately follows the end of the global mark cycle.</p>
<p>To search for a <code>balanced</code> global mark cycle, you can search for the <code>type</code> attribute value <code>global mark phase</code> in <code>&lt;cycle-start&gt;</code> and <code>&lt;cycle-end&gt;</code> elements.</p>
<p>The global cycle is split into multiple increments, each recorded as <code>type="global mark phase"</code>. A global mark phase increment involves an STW subincrement, which runs a global mark operation during an STW pause, followed by a <em>global mark phase (GMP) work packet</em> subincrement. The GMP work packet subincrement involves a processing operation that runs concurrently. The GMP work packet subincrement might also use an STW pause to complete if the subincrement is interrupted by a partial or global cycle trigger.</p>
<p>Splitting the global mark phase into these increments and subincrements reduces pause times by running the majority of the GC work concurrently and interleaving global mark phase increments with partial GC cycles, and, rarely a <a href="./#balanced-global-gc-cycle"><code>balanced</code> global GC cycles</a>.</p>
<p>The following elements log the GC increments, subincrements, and operations of the global mark GC cycle:</p>
<table style="width:100%" align="center">
<col>
<col>
<col>
<col>
<col style="width: 60%;">
<caption>Table showing the global mark cycle GC increments and corresponding XML elements</caption>
<thead>
<tr>
<th scope="col" >GC increment</th>
<th align="center" scope="col">GC operations></th>
<th scope="col">STW or concurrent</th>
<th scope="col">XML element of GC increment</th>
<th scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td scope="row"> <code>global mark phase</code> subincrement</td>
<td align="center">mark</td>
<td>STW</td>
<td><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></td>
<td>The global mark phase operations start at the beginning of the cycle and run through all regions until the final region</td>
</tr>
<tr>
<td scope="row"><code>GMP work packet processing</code> subincrement</td>
<td align="center">Work packet processing (WPP) operations</td>
<td>concurrent and sometimes final operations during an STW to complete the subincrement</td>
<td><code>&lt;concurrent-start&gt;</code>, <code>&lt;concurrent-end&gt;</code></td>
<td>The <code>GMP work packet processing subincrement</code> runs immediately after the <code>global mark phase</code><td>
</tr>
<tr>
<td scope="row"> final global mark phase increment</td>
<td align="center">final global mark phase operations including class unload</td>
<td>STW</td>
<td><code>&lt;gc-start&gt;</code>, <code>&lt;gc-end&gt;</code></td>
<td>Final increment. Runs the final global mark phase operations, including weak roots processing, followed by operations to finish the cycle</td>
</tr>
</tbody>
</table>
<p>The following structure shows a <code>balanced</code> global mark GC cycle. The lines are indented to help illustrate the flow and some child elements are omitted for clarity:</p>
<pre><code class="xml">&lt;exclusive-start/&gt; (STW pause starts)
&lt;allocation-taxation/&gt; (memory threshold trigger recorded)
&lt;cycle-start type=&quot;global mark phase&quot;/&gt; (global mark cycle starts)
&lt;gc-start type=&quot;global mark phase&quot;/&gt; (1st GMP STW subincrement starts)
&lt;mem-info&gt; (memory status before operations)
&lt;remembered-set&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
&lt;gc-op type=&quot;mark increment&quot; /&gt; (STW copy forward operation completed)
&lt;gc-end&gt; (1st GMP STW subincrement ends)
&lt;mem-info&gt; (memory status after operations)
&lt;remembered-set&gt;
&lt;/mem-info&gt;
&lt;gc-end&gt;
&lt;concurrent-start type=&quot;GMP work packet processing&quot;/&gt; (1st GMP concurrent subincrement starts)
&lt;exclusive-end/&gt; (STW pause ends and application threads resume)
&lt;concurrent-end type=&quot;GMP work packet processing&quot;/&gt; (1st GMP concurrent subincrement ends)
&lt;gc-op type=&quot;mark increment&quot;/&gt; (marking operation runs concurrently)
&lt;/concurrent-end type=&quot;GMP work packet processing&quot;/&gt;
... (application threads run. STW pauses stop
and start application threads to run
partial GC cycles.)
&lt;exclusive-start/&gt; (STW pause starts)
&lt;gc-start type=&quot;global mark phase&quot;/&gt; (2nd STW GMP subincrement starts)
...
&lt;concurrent-start type=&quot;GMP work packet processing&quot;/&gt; (2nd concurrent GMP subincrement starts)
...
&lt;exclusive-end/&gt;
... (application threads run. Partial GC cycles may run)
&lt;concurrent-end type=&quot;GMP work packet processing&quot; /&gt; (2nd concurrent GMP subincrement ends)
...
&lt;/concurrent-end&gt;
... (application threads run. Partial cycles
and GMP increments interleave)
&lt;exclusive-start/&gt; (STW pause starts)
...
&lt;gc-start type=&quot;global mark phase&quot;/&gt; (final STW GMP subincrement starts.)
&lt;gc-op type=&quot;mark increment&quot; /&gt; (STW copy forward operation completed)
&lt;gc-op type=&quot;class unload&quot; /&gt; (STW class unload operation completed)
&lt;gc-end&gt; (1st GMP STW subincrement ends)
...
&lt;gc-end type=&quot;global mark phase&quot;/&gt; (final STW GMP subincrement ends. No concurrent subincrement runs)
&lt;cycle-end type=&quot;global mark phase&quot;/&gt; (end of global mark cycle)
&lt;exclusive-end/&gt; (STW pause ends)
&lt;exclusive-start/&gt; (STW pause starts)
&lt;cycle-start type=&quot;partial gc&quot; /&gt; (partial cycle starts)
...
&lt;gc-op type=&quot;sweep&quot; /&gt; (Sweep operation associated with global mark cycle runs)
...
&lt;cycle-end type=&quot;partial gc&quot;/&gt; (partial GC cycle ends)
&lt;exclusive-end/&gt; (STw pause ends)
</code></pre>
<h4 id="global-mark-phase">Global mark phase</h4>
<p>The first activity of the global mark cycle is an STW pause, recorded by an <code>&lt;exclusive-start&gt;</code> element that precedes the <code>&lt;cycle-start type="global mark phase"/&gt;</code> element. The garbage collector pauses application threads to run the initial operations.</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;1152&quot; timestamp=&quot;2021-02-26T11:17:25.033&quot; intervalms=&quot;1931.263&quot;&gt;
&lt;response-info timems=&quot;3.082&quot; idlems=&quot;1.041&quot; threads=&quot;2&quot; lastid=&quot;00000000006EDE00&quot; lastname=&quot;RunDataWriter.1&quot; /&gt;
&lt;/exclusive-start&gt;
</code></pre>
<p>The <code>&lt;allocation-taxation&gt;</code> element indicates that an allocation taxation threshold triggered the cycle. The <code>taxation threshold</code> is recorded as 1024 MB (1,073,741,824), which is half the total memory of the eden space (2048 MB), as expected for threshold triggers of global mark cycles and increments. For more information about taxation thresholds for the <code>balanced</code> policy, see <a href="./#balanced-examples"><code>balanced</code> examples</a>.</p>
<pre><code class="xml">&lt;allocation-taxation id=&quot;1153&quot; taxation-threshold=&quot;1073741824&quot; timestamp=&quot;2021-02-26T11:17:25.034&quot; intervalms=&quot;1931.251&quot; /&gt;
</code></pre>
<p>Details about the start of the global mark GC cycle are recorded by the <code>&lt;cycle-start&gt;</code> element. The cycle is recorded as type <code>global mark phase</code> with <code>id=1154</code>. Any subsequent elements that are associated with this cycle have a <code>contextid=1154</code> to match the global mark GC cycle <code>id</code>. You can use the <code>contextid</code> value to distinguish increments and operations of the global mark GC cycle from the partial cycles that interleave with it.</p>
<pre><code class="xml">&lt;cycle-start id=&quot;1154&quot; type=&quot;global mark phase&quot; contextid=&quot;0&quot; timestamp=&quot;2021-02-26T11:17:25.034&quot; intervalms=&quot;374365.075&quot; /&gt;
</code></pre>
<p>The cycle begins with the STW subincrement of a global mark phase increment. The STW subincrement is recorded by using the <code>&lt;gc-start&gt;</code> element of type <code>global mark phase</code>.</p>
<pre><code class="xml">&lt;gc-start id=&quot;1155&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:25.034&quot;&gt;
&lt;mem-info id=&quot;1156&quot; free=&quot;1442840576&quot; total=&quot;4294967296&quot; percent=&quot;33&quot;&gt;
&lt;remembered-set count=&quot;2197888&quot; freebytes=&quot;162912768&quot; totalbytes=&quot;171704320&quot; percent=&quot;94&quot; regionsoverflowed=&quot;3&quot; regionsstable=&quot;130&quot; regionsrebuilding=&quot;0&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
</code></pre>
<p>The <code>&lt;gc-start&gt;</code> element provides a snapshot of the free memory available in the heap and the status of the remembered set. At the start of the increment, the heap is 33% free; 1376 MB (1442840576 B) of the total 4096 MB (4294967296 B).</p>
<p>The <code>&lt;remembered-set&gt;</code> element records the status of the remembered set metastructure, a structure that records object references that cross different regions. During the rebuilding of the remembered set metastructure, any regions that cannot be rebuilt into a remembered set due to a lack of memory resource in the metastructure are marked as <em>overflow</em> regions. Partial GC cycles cannot reclaim memory from overflow regions.</p>
<p>The aim of the global mark cycle is to create a new record of object liveness by populating the remembered set. The global mark cycle also attempts to rebuild the remembered set information for the overflowed regions, which can be seen in the remembered set statistics. After the global mark cycle completes, the remembered set reflects a closer snapshot of the current liveness of the heap. This more accurate snapshot of object liveness optimizes the pruning of the set, which is run by the partial GC cycle when it consumes the object liveness snapshot.</p>
<p>The logs show that at the start of this STW subincrement, the remembered set count is 2,197,888 cards, the metastructure is using 94% of its total available memory, and three overflow regions need to be rebuilt.</p>
<p>The <code>&lt;gc-op&gt;</code> element records that the STW subincrement runs a <a href="../gc_overview/#gc-mark-operation">mark operation</a>. This operation begins the process of building a record of object liveness across the heap.</p>
<pre><code class="xml">&lt;gc-op id=&quot;1157&quot; type=&quot;mark increment&quot; timems=&quot;122.825&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:25.157&quot;&gt;
&lt;trace-info objectcount=&quot;7726701&quot; scancount=&quot;7584109&quot; scanbytes=&quot;213445656&quot; /&gt;
&lt;/gc-op&gt;
</code></pre>
<p>The <code>&lt;trace-info&gt;</code> element records information about the marking and scanning stages of the mark increment operation. <code>objectcount</code> records the number of objects that were marked, ready for tracing. After marking live objects, a scan is run to trace objects and references. The following values are recorded:</p>
<ul>
<li><code>scancount</code> records the number of marked objects that were scanned.</li>
<li><code>scanbytes</code> records the total memory of all marked objects that were scanned.</li>
</ul>
<p>In the example, the mark increment operation marked 7,726,701 objects and scanned 7,584,109 of these marked objects. The 7,584,109 of scanned objects take up 203.5 MB (213445656 B) of memory. The number of scanned objects is less than the number of marked objects because only objects that have children require scanning. Also, the scanning part of the marking operation might be interrupted by the garbage collector if a trigger threshold for a partial cycle or global cycle is reached during the marking operation.</p>
<p>The STW <code>global mark phase</code> subincrement ends, as recorded by <code>&lt;gc-end&gt;</code>, which records a snapshot of the memory status in the heap in a similar way to <code>&lt;gc-start&gt;</code>.</p>
<pre><code class="xml">&lt;gc-end id=&quot;1158&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; durationms=&quot;123.139&quot; usertimems=&quot;977.851&quot; systemtimems=&quot;0.000&quot; stalltimems=&quot;1.453&quot; timestamp=&quot;2021-02-26T11:17:25.157&quot; activeThreads=&quot;8&quot;&gt;
&lt;mem-info id=&quot;1159&quot; free=&quot;1442840576&quot; total=&quot;4294967296&quot; percent=&quot;33&quot;&gt;
&lt;remembered-set count=&quot;3263968&quot; freebytes=&quot;158648448&quot; totalbytes=&quot;171704320&quot; percent=&quot;92&quot; regionsoverflowed=&quot;0&quot; regionsstable=&quot;0&quot; regionsrebuilding=&quot;133&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>The following comparison can be made between the snapshot at the beginning and end of this STW <code>global mark phase</code> subincrement:</p>
<ul>
<li>The marking operation has increased the <code>count</code> value of the <code>&lt;remembered-set&gt;</code> by 1,066,080 cards (from 2,197,888 to 3,263,968). As regions are rebuilt, the new cards record the new remembered set data that is associated with these regions.</li>
<li>The number of overflow regions went from three to zero.</li>
<li>As expected with a global mark cycle, there is no change in the amount of free memory available, which is 1376 MB.</li>
</ul>
<p>The beginning of the second part of the global mark phase increment, the GMP work packet processing subincrememt, is recorded by <code>&lt;concurrent-start&gt;</code>. The child element <code>&lt;concurrent-mark-start&gt;</code> records the scan target of this subincrement as 242.74 MB (254,532,672 B).</p>
<pre><code class="xml">&lt;concurrent-start id=&quot;1160&quot; type=&quot;GMP work packet processing&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:25.157&quot;&gt;
&lt;concurrent-mark-start scanTarget=&quot;254532672&quot; /&gt;
&lt;/concurrent-start&gt;
</code></pre>
<p>Now that the STW global mark phase subincrement is complete, application threads are restarted.</p>
<pre><code class="xml">&lt;exclusive-end id=&quot;1161&quot; timestamp=&quot;2021-02-26T11:17:25.157&quot; durationms=&quot;123.936&quot; /&gt;
</code></pre>
<p>The <code>GMP work packet processing</code> subincrement continues to run concurrently. The end of this operation is recorded by using the <code>&lt;concurrent-end&gt;</code> element.</p>
<pre><code class="xml">&lt;concurrent-end id=&quot;1162&quot; type=&quot;GMP work packet processing&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:25.469&quot; terminationReason=&quot;Work target met&quot;&gt;
&lt;gc-op id=&quot;1163&quot; type=&quot;mark increment&quot; timems=&quot;311.867&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:25.469&quot;&gt;
&lt;trace-info scanbytes=&quot;254708852&quot; /&gt;
&lt;/gc-op&gt;
&lt;/concurrent-end&gt;
</code></pre>
<p>The child element <code>&lt;trace-info&gt;</code> shows that the processing scanned 242.91 MB (254,708,852 B), which slightly exceeds the 108.25 MB scan target.</p>
<p>Application threads continue to run and allocate memory. The garbage collector stops and starts the application threads to run partial GC cycles that reclaim free space in the eden space and some older regions. To see an example of how a <code>balanced</code> partial GC cycle appears in the logs, see the <a href="#balanced-partial-gc-cycle"><code>balanced</code> partial GC cycle</a>.</p>
<p>Following some partial GC cycles, an allocation taxation threshold is reached that triggers an STW pause followed by another global mark phase increment. The element <code>&lt;gc-start&gt;</code> in the following log excerpt has a <code>contextid=1154</code> and type <code>global mark phase</code>, which indicates that this is a global mark phase subincrement associated with the global mark cycle example.</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;1175&quot; timestamp=&quot;2021-02-26T11:17:28.993&quot; intervalms=&quot;1978.886&quot;&gt;
&lt;response-info timems=&quot;5.111&quot; idlems=&quot;1.714&quot; threads=&quot;2&quot; lastid=&quot;00000000006EDE00&quot; lastname=&quot;RunDataWriter.1&quot; /&gt;
&lt;/exclusive-start&gt;
&lt;allocation-taxation id=&quot;1176&quot; taxation-threshold=&quot;1073741824&quot; timestamp=&quot;2021-02-26T11:17:28.994&quot; intervalms=&quot;1978.879&quot; /&gt;
&lt;gc-start id=&quot;1177&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:28.994&quot;&gt;
&lt;mem-info id=&quot;1178&quot; free=&quot;1451229184&quot; total=&quot;4294967296&quot; percent=&quot;33&quot;&gt;
&lt;remembered-set count=&quot;3325824&quot; freebytes=&quot;158401024&quot; totalbytes=&quot;171704320&quot; percent=&quot;92&quot; regionsoverflowed=&quot;2&quot; regionsstable=&quot;0&quot; regionsrebuilding=&quot;133&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
</code></pre>
<p>The <code>&lt;allocation-taxation&gt;</code> element shows that the allocation taxation threshold, which triggers this global mark phase increment, is set to 1024 MB, half of the size of the eden space, as expected.</p>
<p><code>&lt;gc-start&gt;</code> records that the heap has 1384 MB (1,451,229,184 B) of free memory available at the beginning of this global mark phase increment. This value compares to the 1376 MB (1,442,840,576 B) of free memory available at the end of the previous global mark phase increment. Although free memory was reclaimed by the partial GC cycles that ran between these global mark phase increments, free memory was allocated to objects when application threads ran, resulting in a net reduction of free memory available.</p>
<!---
The `<remembered set>` element shows that there are two overflow regions to attempt to rebuild.-->
<p>The status of the heap at the beginning and end of STW subincrements are automatically recorded. For this STW subincrement, there are no <code>&lt;gc-op&gt;</code> elements recorded; <code>&lt;gc-end&gt;</code> immediately follows <code>&lt;gc-start&gt;</code> in the logs. For some STW subincrements, a mark operation is run.</p>
<pre><code class="xml">&lt;gc-end id=&quot;1179&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; durationms=&quot;0.289&quot; usertimems=&quot;1.000&quot; systemtimems=&quot;0.000&quot; stalltimems=&quot;0.000&quot; timestamp=&quot;2021-02-26T11:17:28.994&quot; activeThreads=&quot;8&quot;&gt;
&lt;mem-info id=&quot;1180&quot; free=&quot;1451229184&quot; total=&quot;4294967296&quot; percent=&quot;33&quot;&gt;
&lt;remembered-set count=&quot;3325824&quot; freebytes=&quot;158401024&quot; totalbytes=&quot;171704320&quot; percent=&quot;92&quot; regionsoverflowed=&quot;2&quot; regionsstable=&quot;0&quot; regionsrebuilding=&quot;133&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>The second part of the increment, the <code>GMP work packet processing</code> subincrement, is recorded by using the <code>&lt;concurrent-start&gt;</code> and <code>&lt;concurrent-end&gt;</code> elements.</p>
<pre><code class="xml">&lt;concurrent-start id=&quot;1181&quot; type=&quot;GMP work packet processing&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:28.994&quot;&gt;
&lt;concurrent-mark-start scanTarget=&quot;258671414&quot; /&gt;
&lt;/concurrent-start&gt;
&lt;exclusive-end id=&quot;1182&quot; timestamp=&quot;2021-02-26T11:17:28.994&quot; durationms=&quot;0.816&quot; /&gt;
&lt;concurrent-end id=&quot;1183&quot; type=&quot;GMP work packet processing&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:29.273&quot; terminationReason=&quot;Work target met&quot;&gt;
&lt;gc-op id=&quot;1184&quot; type=&quot;mark increment&quot; timems=&quot;279.311&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:29.274&quot;&gt;
&lt;trace-info scanbytes=&quot;258767612&quot; /&gt;
&lt;/gc-op&gt;
&lt;/concurrent-end&gt;
</code></pre>
<p>The log excerpt shows the concurrent <code>GMP work packet processing</code> subincrement achieved the scan target of 246.69 MB (258671414 B). 246.78 MB (258767612 B) were scanned.</p>
<p>More partial cycles run. This pattern of interleaving of global mark increments with partial GC cycles repeats until a final global mark increment completes the global mark cycle. The final global mark phase increment consists of an STW <code>global mark phase</code> subincrement that includes <code>mark increment</code> and <code>class unload</code> operations.</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;1217&quot; timestamp=&quot;2021-02-26T11:17:36.864&quot; intervalms=&quot;1986.124&quot;&gt;
&lt;response-info timems=&quot;0.287&quot; idlems=&quot;0.104&quot; threads=&quot;2&quot; lastid=&quot;00000000006EDE00&quot; lastname=&quot;RunDataWriter.1&quot; /&gt;
&lt;/exclusive-start&gt;
&lt;allocation-taxation id=&quot;1218&quot; taxation-threshold=&quot;1073741824&quot; timestamp=&quot;2021-02-26T11:17:36.865&quot; intervalms=&quot;1986.101&quot; /&gt;
&lt;gc-start id=&quot;1219&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:36.865&quot;&gt;
&lt;mem-info id=&quot;1220&quot; free=&quot;1438646272&quot; total=&quot;4294967296&quot; percent=&quot;33&quot;&gt;
&lt;remembered-set count=&quot;3514496&quot; freebytes=&quot;157646336&quot; totalbytes=&quot;171704320&quot; percent=&quot;91&quot; regionsoverflowed=&quot;3&quot; regionsstable=&quot;0&quot; regionsrebuilding=&quot;133&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
&lt;gc-op id=&quot;1221&quot; type=&quot;mark increment&quot; timems=&quot;164.843&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:37.030&quot;&gt;
&lt;trace-info objectcount=&quot;7715572&quot; scancount=&quot;7665293&quot; scanbytes=&quot;214739196&quot; /&gt;
&lt;cardclean-info objects=&quot;3962203&quot; bytes=&quot;117924792&quot; /&gt;
&lt;finalization candidates=&quot;206&quot; enqueued=&quot;30&quot; /&gt;
&lt;ownableSynchronizers candidates=&quot;601780&quot; cleared=&quot;16925&quot; /&gt;
&lt;references type=&quot;soft&quot; candidates=&quot;718240&quot; cleared=&quot;2858&quot; enqueued=&quot;2832&quot; dynamicThreshold=&quot;18&quot; maxThreshold=&quot;32&quot; /&gt;
&lt;references type=&quot;weak&quot; candidates=&quot;2321&quot; cleared=&quot;142&quot; enqueued=&quot;0&quot; /&gt;
&lt;references type=&quot;phantom&quot; candidates=&quot;8&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; /&gt;
&lt;stringconstants candidates=&quot;9522&quot; cleared=&quot;0&quot; /&gt;
&lt;object-monitors candidates=&quot;7142&quot; cleared=&quot;7066&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;1222&quot; type=&quot;classunload&quot; timems=&quot;0.704&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:37.030&quot;&gt;
&lt;classunload-info classloadercandidates=&quot;185&quot; classloadersunloaded=&quot;13&quot; classesunloaded=&quot;13&quot; anonymousclassesunloaded=&quot;0&quot; quiescems=&quot;0.000&quot; setupms=&quot;0.644&quot; scanms=&quot;0.043&quot; postms=&quot;0.016&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-end id=&quot;1223&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; durationms=&quot;169.521&quot; usertimems=&quot;1244.810&quot; systemtimems=&quot;3.000&quot; stalltimems=&quot;27.792&quot; timestamp=&quot;2021-02-26T11:17:37.034&quot; activeThreads=&quot;8&quot;&gt;
&lt;mem-info id=&quot;1224&quot; free=&quot;1438646272&quot; total=&quot;4294967296&quot; percent=&quot;33&quot;&gt;
&lt;pending-finalizers system=&quot;30&quot; default=&quot;0&quot; reference=&quot;2832&quot; classloader=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;2241440&quot; freebytes=&quot;162738560&quot; totalbytes=&quot;171704320&quot; percent=&quot;94&quot; regionsoverflowed=&quot;3&quot; regionsstable=&quot;127&quot; regionsrebuilding=&quot;0&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>Comparing the memory at the start and end of this final <code>global mark phase</code> increment shows the following status:</p>
<ul>
<li>As expected, the final global mark phase increment does not reclaim any free memory.</li>
<li>The remembered set metastructure was marginally rebuilt. The card count has increased slightly, and the number of stable regions dropped from 130 to 127. <!--and the amount of available memory in the metastructure increased from 91% to 94%.--></li>
<li>The number of overflow regions remains unchanged. The final global mark phase increment did not manage to rebuild any overflow regions.</li>
</ul>
<p>Following the final global mark increment, the global mark cycle completes and the GC ends the STW pause.</p>
<pre><code class="xml">&lt;cycle-end id=&quot;1225&quot; type=&quot;global mark phase&quot; contextid=&quot;1154&quot; timestamp=&quot;2021-02-26T11:17:37.034&quot; /&gt;
&lt;exclusive-end id=&quot;1226&quot; timestamp=&quot;2021-02-26T11:17:37.034&quot; durationms=&quot;170.186&quot; /&gt;
</code></pre>
<p>The operations to create a record of object liveness across the heap, which began with the global mark cycle, is followed by a sweep phase. The sweep phase is triggered by the end of the global mark cycle to be included in the next partial GC cycle that runs.</p>
<h4 id="sweep-phase">Sweep phase</h4>
<p>The sweep operation has the following two objectives:</p>
<ul>
<li>To directly reclaim some memory by creating empty regions.</li>
<li>To build information about occupancy and fragmentation for regions that still contain live objects. The next partial GC cycle uses this information to defragment older regions.</li>
</ul>
<p>While the global <em>sweep</em> operation is logically associated with the global mark phase, it does not run in the same global mark cycle. Instead, the sweep operation runs in the same STW increment as the first partial GC cycle that runs after the completion of the global mark cycle. This can be seen in the following log excerpt. After the log records the end of the global mark cycle, it records an STW pause followed by a <code>partial gc</code> cycle of <code>id=1229</code>. The global sweep operation that runs after the global mark phase is recorded in the <code>&lt;gc-op&gt;</code> element that is tagged as <code>id=1229</code>.</p>
<pre><code class="xml">&lt;exclusive-start id=&quot;1227&quot; timestamp=&quot;2021-02-26T11:17:38.804&quot; intervalms=&quot;1940.125&quot;&gt;
...
&lt;cycle-start id=&quot;1229&quot; type=&quot;partial gc&quot; contextid=&quot;0&quot; timestamp=&quot;2021-02-26T11:17:38.805&quot; intervalms=&quot;3926.202&quot; /&gt;
...
&lt;/gc-start&gt;
...
&lt;/gc-start&gt;
&lt;gc-op id=&quot;1232&quot; type=&quot;sweep&quot; timems=&quot;9.472&quot; contextid=&quot;1229&quot; timestamp=&quot;2021-02-26T11:17:38.815&quot; /&gt;
&lt;gc-op id=&quot;1233&quot; type=&quot;copy forward&quot; timems=&quot;308.258&quot; contextid=&quot;1229&quot; timestamp=&quot;2021-02-26T11:17:39.124&quot;&gt;
...
&lt;gc-op id=&quot;1234&quot; type=&quot;classunload&quot; timems=&quot;0.012&quot; contextid=&quot;1229&quot; timestamp=&quot;2021-02-26T11:17:39.125&quot;&gt;
...
&lt;gc-end&gt;
...
&lt;/gc-end&gt;
&lt;cycle-end id=&quot;1237&quot; type=&quot;partial gc&quot; contextid=&quot;1229&quot; timestamp=&quot;2021-02-26T11:17:39.125&quot; /&gt;
&lt;exclusive-end id=&quot;1238&quot; timestamp=&quot;2021-02-26T11:17:39.125&quot; durationms=&quot;320.792&quot; /&gt;
</code></pre>
<p>A record of object liveness is now complete.</p>
<h4 id="summary_3">Summary</h4>
<p>Analyzing the structure and elements of this example log output shows that this example <code>balanced</code> global mark GC cycle has the following characteristics:</p>
<ul>
<li>If the total free memory is low when the taxation allocation threshold is reached, the GC triggers a global mark cycle. The allocation taxation threshold is set by the previous cycle to trigger a new cycle when the eden space is half full. This threshold value frees up eden space to enable a global mark cycle to interleave with the GC operations of partial GC cycles.</li>
<li>Each global mark phase increment is triggered by an allocation taxation threshold value that is set to half of the eden space.</li>
<li>Global mark GC cycle and global mark cycle increments begin with an STW pause.</li>
<li>The global mark cycle does not reclaim memory. The cycle creates an updated record of object liveness by rebuilding the mark map, and also attempts to rebuild the remembered set for overflowed and stable regions. The change in status of the remembered set metastructure can be seen in the logs by inspecting the <code>&lt;remembered-set&gt;</code> attributes.</li>
<li>Partial cycles run in between global mark phase increments.</li>
<li>The final global mark phase increment includes a class unload. The final increment also triggers a sweep phase to run in the next partial cycle.</li>
</ul>
<h3 id="balanced-global-gc-cycle"><code>balanced</code> global GC cycle</h3>
<p>The following global GC cycle example is taken from a <code>balanced</code> verbose GC log. The output is broken down into sections to explain the GC processing that is taking place.</p>
<p>A <code>balanced</code> global cycle is triggered if the VM is close to throwing an out of memory exception. This situation occurs only under tight memory conditions when the garbage collector cannot reclaim enough memory by using only partial and global mark cycles.</p>
<p>To search for a <code>balanced</code> global cycle or increment, you can search for the <code>type</code> attribute value <code>global garbage collect</code> of the cycle or increment element.</p>
<p>If the <code>balanced</code> global cycle is triggered during a <a href="#balanced-global-mark-gc-cycle"><code>balanced</code> global mark GC cycle</a>, a new <code>global</code> cycle is not recorded. Instead, the global mark cycle's global mark phase increment switches to a global garbage collect increment that is run as an STW increment. This switch is recorded in the logs by using a <code>&lt;cycle-continue&gt;</code> element, which precedes the <code>gc-start</code> element that records the new global garbage collect increment.</p>
<p>If the <code>balanced</code> global cycle is not triggered during a <code>balanced</code> global mark cycle, the global cycle is recorded as a new cycle by using the <code>&lt;cycle-start&gt;</code> element.</p>
<p>The element <code>&lt;sys-start reason="explicit"&gt;</code> is used in the logs to record a cycle that was triggered explicitly rather than by the garbage collector. For example, the trigger reason is recorded as <code>explicit</code> if a cycle is triggered by an application calling <code>System.gc()</code>. For more information about explicitly or implicitly triggering a GC cycle, see <a href="../gc_overview/">Garbage collection</a>.</p>
<p>The global cycle operations run as a single GC increment during an STW pause.</p>
<table style="width:100%" align="center">
<caption>Table showing the <code>balanced</code> global cycle's GC increment and corresponding XML elements.</caption>
<thead>
<tr>
<th align="center" scope="col">GC increment </th>
<th align="center" scope="col">GC operations</th>
<th align="center" scope="col">STW or concurrent</th>
<th align="center" scope="col">XML element of GC increment</th>
<th align="center" scope="col">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">single</td>
<td align="center">STW mark-sweep operations, optionally followed by a compact operation</td>
<td align="center">STW</td>
<td align="center"><code>&lt;cycle-start&gt;</code>, <code>&lt;gc-end&gt;</code></code></td>
<td>Contains detailed information about where free memory is located and remembered set statistics</td>
</tr>
</tbody>
</table>
<p>If the global cycle is triggered during a global mark cycle, the global cycle follows a general structure in the verbose GC log as shown. Some child elements are omitted for clarity:</p>
<pre><code class="xml">... (global mark cycle increment runs)
&lt;af-start/&gt; (allocation failure trigger recorded)
&lt;concurrent-end/&gt; (global mark cycle concurrent subincrement finishes )
&lt;allocation-taxation/&gt; (memory threshold trigger recorded)
&lt;cycle-continue/&gt; (change of cycle type from global mark to global)
&lt;/gc-start type=&quot;global garbage collect&quot;/&gt; (global cycle STW increment starts)
&lt;mem-info&gt; (memory status before operations)
&lt;mem&gt;&lt;/mem&gt; (status of different types of memory)
&lt;/mem-info&gt;
&lt;/gc-start type=&quot;global garbage collect&quot;/&gt;
&lt;allocation-stats/&gt; (Snapshot of how memory was divided up between
... application threads before current cycle started)
&lt;gc-op&gt; type=&quot;mark&quot; &lt;/gc-op&gt; (mark operation completed)
&lt;gc-op&gt; type=&quot;class unload&quot; &lt;/gc-op&gt; (class unload operation completed)
&lt;gc-op&gt; type=&quot;sweep&quot; &lt;/gc-op&gt; (sweep operation completed)
&lt;gc-op&gt; type=&quot;compact&quot; &lt;/gc-op&gt; (compact operation completed)
&lt;gc-end type=&quot;global garbage collect&quot;&gt; (global cycle STW increment ends)
&lt;mem-info&gt; (memory status after operations)
&lt;mem&gt;&lt;/mem&gt; (status of different types of memory)
&lt;/mem-info&gt;
&lt;/gc-end type=&quot;global garbage collect&quot;&gt;
&lt;cycle-end type = &quot;global garbage collect&quot;/&gt; (cycle ends)
&lt;allocation-satisfed/&gt; (required allocation has been achieved)
&lt;exclusive-end&gt; (STW pause ends)
</code></pre>
<p>The following example shows a <code>balanced</code> global cycle that is triggered during a <a href="#balanced-global-mark-gc-cycle">global mark cycle</a>.</p>
<p>The start of the GMP work processing subincrement of the global mark cycle, which runs concurrently with application threads, is recorded by using the <code>&lt;concurrent-start&gt;</code> element.</p>
<pre><code class="xml">&lt;concurrent-start id=&quot;2009&quot; type=&quot;GMP work packet processing&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.109&quot;&gt;
&lt;concurrent-mark-start scanTarget=&quot;18446744073709551615&quot; /&gt;
&lt;/concurrent-start&gt;
</code></pre>
<p>After the start of the concurrent subincrement, the logs record an allocation failure by using <code>&lt;af-start&gt;</code>. The <code>&lt;concurrent-end&gt;</code> element attribute <code>terminationReason</code> shows that a termination of the concurrent increment was requested by the garbage collector.</p>
<pre><code class="xml">&lt;af-start id=&quot;2010&quot; threadId=&quot;00000000008AA780&quot; totalBytesRequested=&quot;24&quot; timestamp=&quot;2021-03-05T12:16:43.109&quot; intervalms=&quot;1212.727&quot; /&gt;
&lt;concurrent-end id=&quot;2011&quot; type=&quot;GMP work packet processing&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.110&quot; terminationReason=&quot;Termination requested&quot;&gt;
&lt;gc-op id=&quot;2012&quot; type=&quot;mark increment&quot; timems=&quot;0.893&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.110&quot;&gt;
&lt;trace-info scanbytes=&quot;584612&quot; /&gt;
&lt;/gc-op&gt;
&lt;/concurrent-end&gt;
</code></pre>
<p>The next element, the <code>&lt;cycle-continue&gt;</code> element, records information about the switch of cycle type from a global mark cycle, recorded as type <code>global mark phase</code>, to a global cycle, recorded as type <code>global garbage collect</code>.</p>
<pre><code class="xml">&lt;cycle-continue id=&quot;2013&quot; oldtype=&quot;global mark phase&quot; newtype=&quot;global garbage collect&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.110&quot; /&gt;
</code></pre>
<p>A global cycle increment is recorded by <code>&lt;gc-start&gt;</code> and has the same <code>contextid</code> as the global mark cycle's elements. The global cycle operations are run during an STW pause and as a modification to the global mark cycle rather than a new cycle. The memory snapshot within the <code>&lt;gc-start&gt;</code> element is taken before the global increment's operations run and can be compared with a similar snapshot that is taken afterward to understand the effect on the heap.</p>
<pre><code class="xml">&lt;gc-start id=&quot;2014&quot; type=&quot;global garbage collect&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.110&quot;&gt;
&lt;mem-info id=&quot;2015&quot; free=&quot;0&quot; total=&quot;838860800&quot; percent=&quot;0&quot;&gt;
&lt;mem type=&quot;eden&quot; free=&quot;0&quot; total=&quot;524288&quot; percent=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;12832&quot; freebytes=&quot;33331072&quot; totalbytes=&quot;33382400&quot; percent=&quot;99&quot; regionsoverflowed=&quot;0&quot; regionsstable=&quot;0&quot; regionsrebuilding=&quot;1593&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-start&gt;
</code></pre>
<p>At the start of the global cycle's increment, the amount of memory available in the heap is zero. In some cases, the heap is close to full, and in other cases, the memory is full.</p>
<p>The next element <code>&lt;allocation-stats&gt;</code> shows a snapshot of how memory was divided up between application threads before the current cycle started.</p>
<pre><code class="xml">&lt;allocation-stats totalBytes=&quot;524200&quot; &gt;
&lt;allocated-bytes non-tlh=&quot;0&quot; tlh=&quot;524200&quot; arrayletleaf=&quot;0&quot;/&gt;
&lt;/allocation-stats&gt;
</code></pre>
<p>The <code>&lt;allocation-stats&gt;</code> element shows that very little allocation took place. Global cycles are triggered due to an allocation failure, so the low memory allocation values are expected.</p>
<p>The following operations, each recorded by a <code>&lt;gc-op&gt;</code> element, run as part of the global cycle's increment:</p>
<ul>
<li><code>global mark</code></li>
<li><code>class unload</code></li>
<li><code>sweep</code></li>
<li><code>compact</code></li>
</ul>
<pre><code class="xml">&lt;gc-op id=&quot;2016&quot; type=&quot;global mark&quot; timems=&quot;357.859&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.468&quot;&gt;
&lt;trace-info objectcount=&quot;37461962&quot; scancount=&quot;37447916&quot; scanbytes=&quot;828311396&quot; /&gt;
&lt;cardclean-info objects=&quot;311&quot; bytes=&quot;22632&quot; /&gt;
&lt;finalization candidates=&quot;195&quot; enqueued=&quot;2&quot; /&gt;
&lt;ownableSynchronizers candidates=&quot;2089&quot; cleared=&quot;0&quot; /&gt;
&lt;references type=&quot;soft&quot; candidates=&quot;3059&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; dynamicThreshold=&quot;0&quot; maxThreshold=&quot;32&quot; /&gt;
&lt;references type=&quot;weak&quot; candidates=&quot;10797&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; /&gt;
&lt;references type=&quot;phantom&quot; candidates=&quot;6&quot; cleared=&quot;0&quot; enqueued=&quot;0&quot; /&gt;
&lt;stringconstants candidates=&quot;10031&quot; cleared=&quot;0&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;2017&quot; type=&quot;classunload&quot; timems=&quot;0.123&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.468&quot;&gt;
&lt;classunload-info classloadercandidates=&quot;25&quot; classloadersunloaded=&quot;0&quot; classesunloaded=&quot;0&quot; anonymousclassesunloaded=&quot;0&quot; quiescems=&quot;0.000&quot; setupms=&quot;0.123&quot; scanms=&quot;0.000&quot; postms=&quot;0.000&quot; /&gt;
&lt;/gc-op&gt;
&lt;gc-op id=&quot;2018&quot; type=&quot;sweep&quot; timems=&quot;5.120&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:43.474&quot; /&gt;
&lt;gc-op id=&quot;2019&quot; type=&quot;compact&quot; timems=&quot;762.323&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:44.236&quot;&gt;
&lt;compact-info movecount=&quot;8024461&quot; movebytes=&quot;163375400&quot; /&gt;
&lt;remembered-set-cleared processed=&quot;777104&quot; cleared=&quot;777104&quot; durationms=&quot;2.188&quot; /&gt;
&lt;/gc-op&gt;
</code></pre>
<p>The global cycle's increment ends. The end of the increment is recorded with <code>&lt;gc-end&gt;</code> and provides another snapshot of memory allocation on the heap, similar to <code>&lt;gc-start&gt;</code>.</p>
<pre><code class="xml">&lt;gc-end id=&quot;2020&quot; type=&quot;global garbage collect&quot; contextid=&quot;2003&quot; durationms=&quot;1126.788&quot; usertimems=&quot;7971.788&quot; systemtimems=&quot;1.000&quot; stalltimems=&quot;1016.256&quot; timestamp=&quot;2021-03-05T12:16:44.237&quot; activeThreads=&quot;8&quot;&gt;
&lt;mem-info id=&quot;2021&quot; free=&quot;1572864&quot; total=&quot;838860800&quot; percent=&quot;0&quot;&gt;
&lt;mem type=&quot;eden&quot; free=&quot;1572864&quot; total=&quot;1572864&quot; percent=&quot;100&quot; /&gt;
&lt;pending-finalizers system=&quot;2&quot; default=&quot;0&quot; reference=&quot;0&quot; classloader=&quot;0&quot; /&gt;
&lt;remembered-set count=&quot;874496&quot; freebytes=&quot;29884416&quot; totalbytes=&quot;33382400&quot; percent=&quot;89&quot; regionsoverflowed=&quot;0&quot; regionsstable=&quot;0&quot; regionsrebuilding=&quot;0&quot;/&gt;
&lt;/mem-info&gt;
&lt;/gc-end&gt;
</code></pre>
<p>Comparing the snapshot at the beginning and end of this STW <code>global mark phase</code> subincrement shows that memory was reclaimed and regions reassigned to create an empty eden space, equal to 1.5 MB (1,572,864 B). Because global cycles are triggered when memory conditions are tight, the global cycle is able to reclaim only a small amount of memory.</p>
<p>The cycle ends (<code>&lt;cycle-end&gt;</code>). The following <code>&lt;allocation-satisfied&gt;</code> element indicates that the allocation request that caused the allocation failure can now complete successfully.</p>
<pre><code class="xml">&lt;cycle-end id=&quot;2022&quot; type=&quot;global garbage collect&quot; contextid=&quot;2003&quot; timestamp=&quot;2021-03-05T12:16:44.237&quot; /&gt;
&lt;allocation-satisfied id=&quot;2023&quot; threadId=&quot;00000000008A9E00&quot; bytesRequested=&quot;24&quot; /&gt;
&lt;af-end id=&quot;2024&quot; timestamp=&quot;2021-03-05T12:16:44.237&quot; threadId=&quot;00000000008AA780&quot; success=&quot;true&quot; /&gt;
</code></pre>
<p>The STW pause ends with the <code>&lt;exclusive-end&gt;</code> element.</p>
<pre><code class="xml">&lt;exclusive-end id=&quot;2025&quot; timestamp=&quot;2021-03-05T12:16:44.237&quot; durationms=&quot;1130.358&quot; /&gt;
</code></pre>
<h4 id="summary_4">Summary</h4>
<p>Analyzing the structure and elements of this example log output shows that this global cycle has the following characteristics:</p>
<ul>
<li>
<p>The global GC cycle was triggered during a global mark GC cycle when the heap was very low in memory. The memory could not be reclaimed by just using partial GC cycles and global mark cycles.</p>
</li>
<li>
<p>The concurrent subincrement of the global mark GC cycle was interrupted by an allocation failure that triggered the concurrent subincrement to end and the <code>global mark</code> cycle type to change to a <code>global</code> type.</p>
</li>
<li>
<p>The global GC cycle consists of only 1 GC increment, which runs mark, sweep, and compact operations during an STW pause.</p>
</li>
<li>
<p>The global GC cycle reclaimed the eden space (1.5 MB of memory). When global GC cycle's are triggered, which occurs when memory conditions are tight, the amount of memory that the global GC cycle reclaims is often small.</p>
</li>
</ul>
<!-- ==== END OF TOPIC ==== vgclog_examples.md ==== -->
</article>
</div>
</div>
</main>
<!--
* Copyright (c) 2017, 2021 IBM Corp. and others
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/legal/epl-2.0/ or the Apache
* License, Version 2.0 which accompanies this distribution and
* is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* This Source Code may also be made available under the
* following Secondary Licenses when the conditions for such
* availability set forth in the Eclipse Public License, v. 2.0
* are satisfied: GNU General Public License, version 2 with
* the GNU Classpath Exception [1] and GNU General Public
* License, version 2 with the OpenJDK Assembly Exception [2].
*
* [1] https://www.gnu.org/software/classpath/license.html
* [2] http://openjdk.java.net/legal/assembly-exception.html
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH
* Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
-->
<footer class="md-footer">
<div class="md-footer-meta">
<!-- Add following links ...................................... -->
<div class="above-line">
<div class="above-line-links">
<div class="column">
<h3 >Docs</h3>
<span class="footer-link"><a href="/openj9/docs/openj9_newuser/" >New to OpenJ9?</a></span>
<span class="footer-link"><a href="/openj9/docs/introduction/">Getting started</a></span>
<span class="footer-link"><a href="/openj9/docs/cmdline_specifying/">Command-line options</a></span>
</div>
<div class="column">
<h3>Resources</h3>
<span class="footer-link"><a href="https://www.eclipse.org/openj9/about/" rel="noopener noreferrer" target="_blank">About</a></span>
<span class="footer-link"><a href="https://www.eclipse.org/openj9/performance/" rel="noopener noreferrer" target="_blank">Performance</a></span>
</div>
<div class="column">
<h3 >Community</h3>
<span class="footer-link"><a href="https://www.eclipse.org/openj9/news/" rel="noopener noreferrer" target="_blank">News</a></span>
<span class="footer-link"><a href="https://blog.openj9.org/" rel="noopener noreferrer" target="_blank">Blogs</a></span>
</div>
</div>
<div class="column-incubator">
<div class="arrange-column">
<h3 ><b>OpenJ9 is an Eclipse Incubator project</b></h3>
<a class="incubator-image" href="http://wiki.eclipse.org/Development_Resources/Process_Guidelines/What_is_Incubation" target="_blank"><img width="50px" src="../cr/incubator-logo.svg" alt="Eclipse Incubation"></a>
</div>
</div>
</div>
<div class="horizontal-line"></div>
<div class="below-line">
<span class="below-line-links"><a href="https://www.eclipse.org/" rel="noopener noreferrer" target="_blank">Eclipse Foundation Website </a></span>
<span class="below-line-links"><a href="https://www.eclipse.org/legal/privacy.php" rel="noopener noreferrer" target="_blank">Privacy Policy</a></span>
<span class="below-line-links"><a href="https://www.eclipse.org/legal/termsofuse.php" rel="noopener noreferrer" target="_blank">Terms of Use</a></span>
<span class="below-line-links"><a href="https://www.eclipse.org/legal/copyright.php" rel="noopener noreferrer" target="_blank">Copyright Agent</a></span>
<span class="below-line-links"><a href="https://www.eclipse.org/legal/" rel="noopener noreferrer" target="_blank">Legal</a></span>
<div class="below-line-social-media-icons">
<div class="md-footer-social">
<a href="https://github.com/eclipse/openj9" target="_blank" rel="noopener" title="OpenJ9 in GitHub" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://openj9.slack.com" target="_blank" rel="noopener" title="OpenJ9 on Slack" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
</a>
<a href="https://twitter.com/openj9" target="_blank" rel="noopener" title="OpenJ9 on Twitter" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://stackoverflow.com/search?q=OpenJ9" target="_blank" rel="noopener" title="OpenJ9 on StackOverflow" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
</a>
</div>
</div>
</div>
<!-- End of added links........................................ -->
<!--
<div class="md-footer-social">
<a href="https://github.com/eclipse/openj9" target="_blank" rel="noopener" title="OpenJ9 in GitHub" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
<a href="https://openj9.slack.com" target="_blank" rel="noopener" title="OpenJ9 on Slack" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
</a>
<a href="https://twitter.com/openj9" target="_blank" rel="noopener" title="OpenJ9 on Twitter" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
</a>
<a href="https://stackoverflow.com/search?q=OpenJ9" target="_blank" rel="noopener" title="OpenJ9 on StackOverflow" class="md-footer-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
</a>
</div>
-->
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.fb4a9340.min.js", "version": 2.0}</script>
<script src="../assets/javascripts/bundle.ca5457b8.min.js"></script>
<script src="../javascripts/oj9.js"></script>
</body>
</html>