8241361: ZGC: Implement memory related JFR events

Co-authored-by: Per Liden <per.liden@oracle.com>
Reviewed-by: pliden, eosterlund
This commit is contained in:
Stefan Karlsson 2020-03-27 15:28:07 +01:00
parent 6df2370120
commit b7439a8ae3
12 changed files with 228 additions and 70 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -36,6 +36,7 @@
#include "gc/z/zTask.hpp"
#include "gc/z/zTracer.inline.hpp"
#include "gc/z/zWorkers.hpp"
#include "jfr/jfrEvents.hpp"
#include "runtime/globals.hpp"
#include "runtime/init.hpp"
#include "runtime/java.hpp"
@ -422,6 +423,8 @@ ZPage* ZPageAllocator::alloc_page_common_inner(uint8_t type, size_t size, bool n
}
ZPage* ZPageAllocator::alloc_page_common(uint8_t type, size_t size, ZAllocationFlags flags) {
EventZPageAllocation event;
ZPage* const page = alloc_page_common_inner(type, size, flags.no_reserve());
if (page == NULL) {
// Out of memory
@ -432,7 +435,8 @@ ZPage* ZPageAllocator::alloc_page_common(uint8_t type, size_t size, ZAllocationF
increase_used(size, flags.relocation());
// Send trace event
ZTracer::tracer()->report_page_alloc(size, _used, max_available(flags.no_reserve()), _cache.available(), flags);
event.commit(type, size, _used, max_available(flags.no_reserve()),
_cache.available(), flags.non_blocking(), flags.no_reserve());
return page;
}
@ -461,6 +465,7 @@ ZPage* ZPageAllocator::alloc_page_blocking(uint8_t type, size_t size, ZAllocatio
if (page == NULL) {
// Allocation failed
ZStatTimer timer(ZCriticalPhaseAllocationStall);
EventZAllocationStall event;
// We can only block if VM is fully initialized
check_out_of_memory_during_initialization();
@ -490,6 +495,8 @@ ZPage* ZPageAllocator::alloc_page_blocking(uint8_t type, size_t size, ZAllocatio
ZLocker<ZLock> locker(&_lock);
_satisfied.remove(&request);
}
event.commit(type, size);
}
return page;
@ -571,7 +578,9 @@ void ZPageAllocator::free_page(ZPage* page, bool reclaimed) {
satisfy_alloc_queue();
}
size_t ZPageAllocator::flush_cache(ZPageCacheFlushClosure* cl) {
size_t ZPageAllocator::flush_cache(ZPageCacheFlushClosure* cl, bool for_allocation) {
EventZPageCacheFlush event;
ZList<ZPage> list;
// Flush pages
@ -591,6 +600,9 @@ size_t ZPageAllocator::flush_cache(ZPageCacheFlushClosure* cl) {
destroy_page(page);
}
// Send event
event.commit(flushed, for_allocation);
return flushed;
}
@ -616,7 +628,7 @@ void ZPageAllocator::flush_cache_for_allocation(size_t requested) {
// Flush pages
ZPageCacheFlushForAllocationClosure cl(requested);
const size_t flushed = flush_cache(&cl);
const size_t flushed = flush_cache(&cl, true /* for_allocation */);
assert(requested == flushed, "Failed to flush");
@ -678,6 +690,7 @@ uint64_t ZPageAllocator::uncommit(uint64_t delay) {
return timeout;
}
EventZUncommit event;
size_t capacity_before;
size_t capacity_after;
size_t uncommitted;
@ -698,7 +711,7 @@ uint64_t ZPageAllocator::uncommit(uint64_t delay) {
if (flush > 0) {
// Flush pages to uncommit
ZPageCacheFlushForUncommitClosure cl(flush, delay);
uncommit += flush_cache(&cl);
uncommit += flush_cache(&cl, false /* for_allocation */);
timeout = cl.timeout();
}
@ -717,6 +730,9 @@ uint64_t ZPageAllocator::uncommit(uint64_t delay) {
capacity_after / M, percent_of(capacity_after, max_capacity()),
uncommitted / M);
// Send event
event.commit(capacity_before, capacity_after, uncommitted);
// Update statistics
ZStatInc(ZCounterUncommit, uncommitted);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -81,7 +81,7 @@ private:
ZPage* alloc_page_blocking(uint8_t type, size_t size, ZAllocationFlags flags);
ZPage* alloc_page_nonblocking(uint8_t type, size_t size, ZAllocationFlags flags);
size_t flush_cache(ZPageCacheFlushClosure* cl);
size_t flush_cache(ZPageCacheFlushClosure* cl, bool for_allocation);
void flush_cache_for_allocation(size_t requested);
void satisfy_alloc_queue();

View File

@ -26,6 +26,7 @@
#include "gc/z/zPage.inline.hpp"
#include "gc/z/zRelocationSet.hpp"
#include "gc/z/zRelocationSetSelector.inline.hpp"
#include "jfr/jfrEvents.hpp"
#include "logging/log.hpp"
#include "runtime/globals.hpp"
#include "utilities/debug.hpp"
@ -41,9 +42,11 @@ ZRelocationSetSelectorGroupStats::ZRelocationSetSelectorGroupStats() :
_compacting_to(0) {}
ZRelocationSetSelectorGroup::ZRelocationSetSelectorGroup(const char* name,
uint8_t page_type,
size_t page_size,
size_t object_size_limit) :
_name(name),
_page_type(page_type),
_page_size(page_size),
_object_size_limit(object_size_limit),
_fragmentation_limit(page_size * (ZFragmentationLimit / 100)),
@ -81,6 +84,16 @@ void ZRelocationSetSelectorGroup::register_garbage_page(ZPage* page) {
_stats._empty += size;
}
bool ZRelocationSetSelectorGroup::is_disabled() {
// Medium pages are disabled when their page size is zero
return _page_type == ZPageTypeMedium && _page_size == 0;
}
bool ZRelocationSetSelectorGroup::is_selectable() {
// Large pages are not selectable
return _page_type != ZPageTypeLarge;
}
void ZRelocationSetSelectorGroup::semi_sort() {
// Semi-sort registered pages by live bytes in ascending order
const size_t npartitions_shift = 11;
@ -123,12 +136,7 @@ void ZRelocationSetSelectorGroup::semi_sort() {
}
}
void ZRelocationSetSelectorGroup::select() {
if (_page_size == 0) {
// Page type disabled
return;
}
void ZRelocationSetSelectorGroup::select_inner() {
// Calculate the number of pages to relocate by successively including pages in
// a candidate relocation set and calculate the maximum space requirement for
// their live objects.
@ -177,10 +185,26 @@ void ZRelocationSetSelectorGroup::select() {
_name, selected_from, selected_to, npages - _nselected);
}
void ZRelocationSetSelectorGroup::select() {
if (is_disabled()) {
return;
}
EventZRelocationSetGroup event;
if (is_selectable()) {
select_inner();
}
// Send event
event.commit(_page_type, _stats.npages(), _stats.total(), _stats.empty(),
_stats.compacting_from(), _stats.compacting_to());
}
ZRelocationSetSelector::ZRelocationSetSelector() :
_small("Small", ZPageSizeSmall, ZObjectSizeLimitSmall),
_medium("Medium", ZPageSizeMedium, ZObjectSizeLimitMedium),
_large("Large", 0 /* page_size */, 0 /* object_size_limit */) {}
_small("Small", ZPageTypeSmall, ZPageSizeSmall, ZObjectSizeLimitSmall),
_medium("Medium", ZPageTypeMedium, ZPageSizeMedium, ZObjectSizeLimitMedium),
_large("Large", ZPageTypeLarge, 0 /* page_size */, 0 /* object_size_limit */) {}
void ZRelocationSetSelector::register_live_page(ZPage* page) {
const uint8_t type = page->type();
@ -213,13 +237,19 @@ void ZRelocationSetSelector::select(ZRelocationSet* relocation_set) {
// bytes in ascending order. Relocating pages in this order allows
// us to start reclaiming memory more quickly.
// Select pages from each group, except large
EventZRelocationSet event;
// Select pages from each group
_large.select();
_medium.select();
_small.select();
// Populate relocation set
relocation_set->populate(_medium.selected(), _medium.nselected(),
_small.selected(), _small.nselected());
// Send event
event.commit(total(), empty(), compacting_from(), compacting_to());
}
ZRelocationSetSelectorStats ZRelocationSetSelector::stats() const {

View File

@ -71,6 +71,7 @@ public:
class ZRelocationSetSelectorGroup {
private:
const char* const _name;
const uint8_t _page_type;
const size_t _page_size;
const size_t _object_size_limit;
const size_t _fragmentation_limit;
@ -80,10 +81,14 @@ private:
size_t _nselected;
ZRelocationSetSelectorGroupStats _stats;
bool is_disabled();
bool is_selectable();
void semi_sort();
void select_inner();
public:
ZRelocationSetSelectorGroup(const char* name,
uint8_t page_type,
size_t page_size,
size_t object_size_limit);
~ZRelocationSetSelectorGroup();
@ -104,6 +109,11 @@ private:
ZRelocationSetSelectorGroup _medium;
ZRelocationSetSelectorGroup _large;
size_t total() const;
size_t empty() const;
size_t compacting_from() const;
size_t compacting_to() const;
public:
ZRelocationSetSelector();

View File

@ -78,4 +78,20 @@ inline const ZRelocationSetSelectorGroupStats& ZRelocationSetSelectorGroup::stat
return _stats;
}
inline size_t ZRelocationSetSelector::total() const {
return _small.stats().total() + _medium.stats().total() + _large.stats().total();
}
inline size_t ZRelocationSetSelector::empty() const {
return _small.stats().empty() + _medium.stats().empty() + _large.stats().empty();
}
inline size_t ZRelocationSetSelector::compacting_from() const {
return _small.stats().compacting_from() + _medium.stats().compacting_from() + _large.stats().compacting_from();
}
inline size_t ZRelocationSetSelector::compacting_to() const {
return _small.stats().compacting_to() + _medium.stats().compacting_to() + _large.stats().compacting_to();
}
#endif // SHARE_GC_Z_ZRELOCATIONSETSELECTOR_INLINE_HPP

View File

@ -1153,7 +1153,9 @@ void ZStatRelocation::print(const char* name, const ZRelocationSetSelectorGroupS
void ZStatRelocation::print() {
print("Small", _stats.small());
print("Medium", _stats.medium());
if (ZPageSizeMedium != 0) {
print("Medium", _stats.medium());
}
print("Large", _stats.large());
log_info(gc, reloc)("Relocation: %s", _success ? "Successful" : "Incomplete");

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -23,6 +23,7 @@
#include "precompiled.hpp"
#include "gc/shared/gcId.hpp"
#include "gc/z/zGlobals.hpp"
#include "gc/z/zStat.hpp"
#include "gc/z/zTracer.hpp"
#include "jfr/jfrEvents.hpp"
@ -35,6 +36,19 @@
#if INCLUDE_JFR
class ZPageTypeConstant : public JfrSerializer {
public:
virtual void serialize(JfrCheckpointWriter& writer) {
writer.write_count(3);
writer.write_key(ZPageTypeSmall);
writer.write("Small");
writer.write_key(ZPageTypeMedium);
writer.write("Medium");
writer.write_key(ZPageTypeLarge);
writer.write("Large");
}
};
class ZStatisticsCounterTypeConstant : public JfrSerializer {
public:
virtual void serialize(JfrCheckpointWriter& writer) {
@ -58,6 +72,9 @@ public:
};
static void register_jfr_type_serializers() {
JfrSerializer::register_serializer(TYPE_ZPAGETYPETYPE,
true /* permit_cache */,
new ZPageTypeConstant());
JfrSerializer::register_serializer(TYPE_ZSTATISTICSCOUNTERTYPE,
true /* permit_cache */,
new ZStatisticsCounterTypeConstant());
@ -114,18 +131,3 @@ void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Tick
e.commit();
}
}
void ZTracer::send_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags) {
NoSafepointVerifier nsv;
EventZPageAllocation e;
if (e.should_commit()) {
e.set_pageSize(size);
e.set_usedAfter(used);
e.set_freeAfter(free);
e.set_inCacheAfter(cache);
e.set_nonBlocking(flags.non_blocking());
e.set_noReserve(flags.no_reserve());
e.commit();
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,7 +25,6 @@
#define SHARE_GC_Z_ZTRACER_HPP
#include "gc/shared/gcTrace.hpp"
#include "gc/z/zAllocationFlags.hpp"
class ZStatCounter;
class ZStatPhase;
@ -40,7 +39,6 @@ private:
void send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value);
void send_stat_sampler(const ZStatSampler& sampler, uint64_t value);
void send_thread_phase(const char* name, const Ticks& start, const Ticks& end);
void send_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags);
public:
static ZTracer* tracer();
@ -49,7 +47,6 @@ public:
void report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value);
void report_stat_sampler(const ZStatSampler& sampler, uint64_t value);
void report_thread_phase(const char* name, const Ticks& start, const Ticks& end);
void report_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags);
};
class ZTraceThreadPhase : public StackObj {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -50,12 +50,6 @@ inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, c
}
}
inline void ZTracer::report_page_alloc(size_t size, size_t used, size_t free, size_t cache, ZAllocationFlags flags) {
if (EventZPageAllocation::is_enabled()) {
send_page_alloc(size, used, free, cache, flags);
}
}
inline ZTraceThreadPhase::ZTraceThreadPhase(const char* name) :
_start(Ticks::now()),
_name(name) {}

View File

@ -988,8 +988,14 @@
<Field type="uint" name="newRatio" label="New Ratio" description="The size of the young generation relative to the tenured generation" />
</Event>
<Event name="ZPageAllocation" category="Java Virtual Machine, GC, Detailed" label="ZPage Allocation" description="Allocation of a ZPage" thread="true" stackTrace="false" experimental="true">
<Field type="ulong" contentType="bytes" name="pageSize" label="Page Size" />
<Event name="ZAllocationStall" category="Java Virtual Machine, GC, Detailed" label="ZGC Allocation Stall" description="Time spent waiting for memory to become available" thread="true" experimental="true">
<Field type="ZPageTypeType" name="type" label="Type" />
<Field type="ulong" contentType="bytes" name="size" label="Size" />
</Event>
<Event name="ZPageAllocation" category="Java Virtual Machine, GC, Detailed" label="ZGC Page Allocation" description="Allocation of a ZPage" thread="true" stackTrace="true" experimental="true">
<Field type="ZPageTypeType" name="type" label="Type" />
<Field type="ulong" contentType="bytes" name="size" label="Size" />
<Field type="ulong" contentType="bytes" name="usedAfter" label="Used After" />
<Field type="ulong" contentType="bytes" name="freeAfter" label="Free After" />
<Field type="ulong" contentType="bytes" name="inCacheAfter" label="In Cache After" />
@ -997,22 +1003,49 @@
<Field type="boolean" name="noReserve" label="No Reserve" />
</Event>
<Event name="ZThreadPhase" category="Java Virtual Machine, GC, Detailed" label="ZGC Thread Phase" thread="true" experimental="true">
<Field type="uint" name="gcId" label="GC Identifier" relation="GcId"/>
<Field type="string" name="name" label="Name" />
<Event name="ZPageCacheFlush" category="Java Virtual Machine, GC, Detailed" label="ZGC Page Cache Flush" description="Flushing of ZPages" thread="true" stackTrace="true" experimental="true">
<Field type="ulong" contentType="bytes" name="flushed" label="Flushed Size" />
<Field type="boolean" name="forAllocation" label="For Allocation" />
</Event>
<Event name="ZStatisticsCounter" category="Java Virtual Machine, GC, Detailed" label="Z Statistics Counter" thread="true" experimental="true" >
<Event name="ZRelocationSet" category="Java Virtual Machine, GC, Detailed" label="ZGC Relocation Set" thread="true" experimental="true">
<Field type="ulong" contentType="bytes" name="total" label="Total" />
<Field type="ulong" contentType="bytes" name="empty" label="Empty" />
<Field type="ulong" contentType="bytes" name="compactingFrom" label="Compacting From" />
<Field type="ulong" contentType="bytes" name="compactingTo" label="Compacting To" />
</Event>
<Event name="ZRelocationSetGroup" category="Java Virtual Machine, GC, Detailed" label="ZGC Relocation Set Group" thread="true" experimental="true">
<Field type="ZPageTypeType" name="type" label="Type" />
<Field type="ulong" name="pages" label="Pages" />
<Field type="ulong" contentType="bytes" name="total" label="Total" />
<Field type="ulong" contentType="bytes" name="empty" label="Empty" />
<Field type="ulong" contentType="bytes" name="compactingFrom" label="Compacting From" />
<Field type="ulong" contentType="bytes" name="compactingTo" label="Compacting To" />
</Event>
<Event name="ZStatisticsCounter" category="Java Virtual Machine, GC, Detailed" label="ZGC Statistics Counter" thread="true" experimental="true" >
<Field type="ZStatisticsCounterType" name="id" label="Id" />
<Field type="ulong" name="increment" label="Increment" />
<Field type="ulong" name="value" label="Value" />
</Event>
<Event name="ZStatisticsSampler" category="Java Virtual Machine, GC, Detailed" label="Z Statistics Sampler" thread="true" experimental="true">
<Event name="ZStatisticsSampler" category="Java Virtual Machine, GC, Detailed" label="ZGC Statistics Sampler" thread="true" experimental="true">
<Field type="ZStatisticsSamplerType" name="id" label="Id" />
<Field type="ulong" name="value" label="Value" />
</Event>
<Event name="ZThreadPhase" category="Java Virtual Machine, GC, Detailed" label="ZGC Thread Phase" thread="true" experimental="true">
<Field type="uint" name="gcId" label="GC Identifier" relation="GcId"/>
<Field type="string" name="name" label="Name" />
</Event>
<Event name="ZUncommit" category="Java Virtual Machine, GC, Detailed" label="ZGC Uncommit" description="Uncommitting of memory" thread="true" experimental="true">
<Field type="ulong" contentType="bytes" name="capacityBefore" label="Capacity Before" />
<Field type="ulong" contentType="bytes" name="capacityAfter" label="Capacity After" />
<Field type="ulong" contentType="bytes" name="uncommitted" label="Uncommitted" />
</Event>
<Event name="ShenandoahHeapRegionStateChange" category="Java Virtual Machine, GC, Detailed" label="Shenandoah Heap Region State Change" description="Information about a Shenandoah heap region state change"
startTime="false">
<Field type="uint" name="index" label="Index" />
@ -1063,6 +1096,10 @@
<Field type="string" name="compiler" label="Compiler" />
</Type>
<Type name="ZPageTypeType" label="Z Page Type">
<Field type="string" name="type" label="Type" />
</Type>
<Type name="ZStatisticsCounterType" label="Z Statistics Counter">
<Field type="string" name="counter" label="Counter" />
</Type>
@ -1254,7 +1291,7 @@
<Relation name="SweepId"/>
<Relation name="FlushId"/>
<Relation name="ClassRedefinitionId"/>
<XmlType name="Package" parameterType="const PackageEntry*" fieldType="const PackageEntry*"/>
<XmlType name="Class" javaType="java.lang.Class" parameterType="const Klass*" fieldType="const Klass*"/>
<XmlType name="Module" parameterType="const ModuleEntry*" fieldType="const ModuleEntry*"/>

View File

@ -705,12 +705,29 @@
<setting name="enabled">true</setting>
</event>
<event name="jdk.ZPageAllocation">
<event name="jdk.ZAllocationStall">
<setting name="enabled">true</setting>
<setting name="threshold">10 ms</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZThreadPhase">
<event name="jdk.ZPageAllocation">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
<setting name="threshold">1 ms</setting>
</event>
<event name="jdk.ZPageCacheFlush">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZRelocationSet">
<setting name="enabled">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZRelocationSetGroup">
<setting name="enabled">true</setting>
<setting name="threshold">0 ms</setting>
</event>
@ -725,6 +742,16 @@
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZThreadPhase">
<setting name="enabled">false</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZUncommit">
<setting name="enabled">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.Deoptimization">
<setting name="enabled">true</setting>
<setting name="stackTrace">false</setting>
@ -733,7 +760,7 @@
<event name="jdk.HeapDump">
<setting name="enabled">true</setting>
<setting name="threshold">0 ns</setting>
<setting name="stackTrace">true</setting>
<setting name="stackTrace">true</setting>
</event>
@ -855,7 +882,7 @@
<option label="High" name="high">high</option>
<option label="Ludicrous (High Overhead)" name="ludicrous">ludicrous</option>
</selection>
<condition name="method-sampling-java-interval" true="999 d">
<test name="method-sampling-interval" operator="equal" value="off"/>
</condition>
@ -871,7 +898,7 @@
<condition name="method-sampling-java-interval" true="1 ms">
<test name="method-sampling-interval" operator="equal" value="ludicrous"/>
</condition>
<condition name="method-sampling-native-interval" true="999 d">
<test name="method-sampling-interval" operator="equal" value="off"/>
</condition>
@ -882,7 +909,7 @@
<test name="method-sampling-interval" operator="equal" value="high"/>
<test name="method-sampling-interval" operator="equal" value="ludicrous"/>
</or>
</condition>
</condition>
<condition name="method-sampling-enabled" true="false" false="true">
<test name="method-sampling-interval" operator="equal" value="off"/>

View File

@ -573,7 +573,7 @@
<setting name="enabled">true</setting>
<setting name="period">endChunk</setting>
</event>
<event name="jdk.ProcessStart">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
@ -705,19 +705,36 @@
<setting name="enabled">true</setting>
</event>
<event name="jdk.ZPageAllocation">
<event name="jdk.ZAllocationStall">
<setting name="enabled">true</setting>
<setting name="threshold">10 ms</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZThreadPhase">
<event name="jdk.ZPageAllocation">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
<setting name="threshold">1 ms</setting>
</event>
<event name="jdk.ZPageCacheFlush">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZRelocationSet">
<setting name="enabled">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZRelocationSetGroup">
<setting name="enabled">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZStatisticsCounter">
<setting name="threshold">0 ms</setting>
<setting name="enabled">false</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZStatisticsSampler">
@ -725,11 +742,21 @@
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZThreadPhase">
<setting name="enabled">false</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.ZUncommit">
<setting name="enabled">true</setting>
<setting name="threshold">0 ms</setting>
</event>
<event name="jdk.Deoptimization">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
</event>
<event name="jdk.HeapDump">
<setting name="enabled">true</setting>
<setting name="threshold">0 ns</setting>
@ -855,7 +882,7 @@
<option label="High" name="high">high</option>
<option label="Ludicrous (High Overhead)" name="ludicrous">ludicrous</option>
</selection>
<condition name="method-sampling-java-interval" true="999 d">
<test name="method-sampling-interval" operator="equal" value="off"/>
</condition>
@ -871,7 +898,7 @@
<condition name="method-sampling-java-interval" true="1 ms">
<test name="method-sampling-interval" operator="equal" value="ludicrous"/>
</condition>
<condition name="method-sampling-native-interval" true="999 d">
<test name="method-sampling-interval" operator="equal" value="off"/>
</condition>
@ -882,8 +909,8 @@
<test name="method-sampling-interval" operator="equal" value="high"/>
<test name="method-sampling-interval" operator="equal" value="ludicrous"/>
</or>
</condition>
</condition>
<condition name="method-sampling-enabled" true="false" false="true">
<test name="method-sampling-interval" operator="equal" value="off"/>
</condition>