publicstatic RecordedEvent getConfigEvent(List<RecordedEvent> events) throws Exception { for (RecordedEvent event : events) { if (EventNames.GCConfiguration.equals(event.getEventType().getName())) { return event;
}
}
fail("Could not find event " + EventNames.GCConfiguration); returnnull;
}
publicstaticvoid callSystemGc(int num, boolean withGarbage) { for (int i = 0; i < num; i++) { if (withGarbage) {
makeGarbage();
}
System.gc();
}
}
privatestaticvoid makeGarbage() {
Object[] garbage = new Object[1024]; for (int i = 0; i < 1024; i++) {
garbage[i] = new Object();
}
}
// Removes gcEvents with lowest and highest gcID. This is used to filter out // any incomplete GCs if the recording started/stopped in the middle of a GC. // We also filters out events without gcId. Those events are not needed. publicstatic List<RecordedEvent> removeFirstAndLastGC(List<RecordedEvent> events) { int minGcId = Integer.MAX_VALUE; int maxGcId = Integer.MIN_VALUE; // Find min/max gcId for (RecordedEvent event : events) { if (Events.hasField(event, "gcId")) { int gcId = Events.assertField(event, "gcId").getValue();
minGcId = Math.min(gcId, minGcId);
maxGcId = Math.max(gcId, maxGcId);
}
}
// Add all events except those with gcId = min/max gcId
List<RecordedEvent> filteredEvents = new ArrayList<>(); for (RecordedEvent event : events) { if (Events.hasField(event, "gcId")) { int gcId = Events.assertField(event, "gcId").getValue(); if (gcId != minGcId && gcId != maxGcId) {
filteredEvents.add(event);
}
}
} return filteredEvents;
}
publicstatic Map<String, Boolean> beanCollectorTypes = new HashMap<>(); publicstatic Set<String> collectorOverrides = new HashSet<>(); publicstatic Map<String, String[]> requiredEvents = new HashMap<>();
static { // young GarbageCollectionMXBeans.
beanCollectorTypes.put("G1 Young Generation", true);
beanCollectorTypes.put("Copy", true);
beanCollectorTypes.put("PS Scavenge", true);
// old GarbageCollectionMXBeans.
beanCollectorTypes.put("G1 Old Generation", false);
beanCollectorTypes.put("G1 Concurrent GC", false);
beanCollectorTypes.put("PS MarkSweep", false);
beanCollectorTypes.put("MarkSweepCompact", false);
// List of expected collector overrides. "A.B" means that collector A may use collector B.
collectorOverrides.add("G1Old.G1Full");
collectorOverrides.add("SerialOld.PSMarkSweep");
requiredEvents.put(gcG1New, new String[] {event_heap_summary, event_young_garbage_collection});
requiredEvents.put(gcDefNew, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_young_garbage_collection});
requiredEvents.put(gcParallelScavenge, new String[] {event_heap_summary, event_heap_ps_summary, event_heap_metaspace_summary, event_reference_statistics, event_phases_pause, event_phases_level_1, event_young_garbage_collection});
requiredEvents.put(gcG1Old, new String[] {event_heap_summary, event_old_garbage_collection});
requiredEvents.put(gcG1Full, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_old_garbage_collection});
requiredEvents.put(gcSerialOld, new String[] {event_heap_summary, event_heap_metaspace_summary, event_phases_pause, event_phases_level_1, event_old_garbage_collection});
requiredEvents.put(gcParallelOld, new String[] {event_heap_summary, event_heap_ps_summary, event_heap_metaspace_summary, event_reference_statistics, event_phases_pause, event_phases_level_1, event_old_garbage_collection, event_parold_garbage_collection});
public String getName() {
RecordedEvent endEvent = getEndEvent();
String name = endEvent == null ? null : Events.assertField(endEvent, "name").getValue(); return name == null ? "null" : name;
}
public RecordedEvent getEndEvent() { return getEvent(event_garbage_collection);
}
publicboolean addEvent(RecordedEvent event) { if (!events.isEmpty()) {
assertEquals(getGcId(), GCHelper.getGcId(event), "Wrong gcId in event. Error in test code.");
} boolean isEndEvent = event_garbage_collection.equals(event.getEventType().getName()); if (isEndEvent) { // Verify that we have not already got a garbage_collection event with this gcId.
assertNull(getEndEvent(), String.format("Multiple %s for gcId %d", event_garbage_collection, getGcId()));
}
events.add(event); return isEndEvent;
}
publicboolean isYoungCollection() { boolean isYoung = containsEvent(event_young_garbage_collection); boolean isOld = containsEvent(event_old_garbage_collection);
assertNotEquals(isYoung, isOld, "isYoung and isOld was same for batch: " + toString()); return isYoung;
}
publicstaticboolean assertIsValidShenandoahHeapRegionState(final String state) { if (!shenandoahHeapRegionStates.contains(state)) { thrownew AssertionError("Unknown state '" + state + "', valid heap region states are " + shenandoahHeapRegionStates);
} returntrue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.