--- old/core/org.openjdk.jmc.flightrecorder.rules.jdk/src/main/java/org/openjdk/jmc/flightrecorder/rules/jdk/memory/GarbageCollectionsInfo.java 2019-05-21 22:52:04.628509300 +0200 +++ new/core/org.openjdk.jmc.flightrecorder.rules.jdk/src/main/java/org/openjdk/jmc/flightrecorder/rules/jdk/memory/GarbageCollectionsInfo.java 2019-05-21 22:52:04.515512100 +0200 @@ -80,12 +80,13 @@ @Override public void consume(IItem item) { String cause = causeAccessor.getMember(item); - if ("Heap Inspection Initiated GC".equals(cause)) { //$NON-NLS-1$ + cause = cause != null ? cause.toLowerCase() : ""; + if ("heap inspection initiated gc".equals(cause)) { //$NON-NLS-1$ objectCountGCs++; - } else if ("System.gc()".equals(cause)) { //$NON-NLS-1$ + } else if ("system.gc()".equals(cause)) { //$NON-NLS-1$ systemGcCount++; } else { - if ("gclocker".equalsIgnoreCase(cause)) { //$NON-NLS-1$ + if (cause.contains("gclocker")) { //$NON-NLS-1$ gcLockers++; } if (!nonRequestedSerialOldGc && CollectorType.SERIAL_OLD.getCollectorName().equals(nameAccessor.getMember(item))) { --- old/core/org.openjdk.jmc.flightrecorder.rules.jdk/src/main/resources/org/openjdk/jmc/flightrecorder/rules/jdk/messages/internal/messages.properties 2019-05-21 22:52:05.448512800 +0200 +++ new/core/org.openjdk.jmc.flightrecorder.rules.jdk/src/main/resources/org/openjdk/jmc/flightrecorder/rules/jdk/messages/internal/messages.properties 2019-05-21 22:52:05.318509300 +0200 @@ -301,9 +301,9 @@ GcLockerRule_TEXT_NA=No GC information events found. GcLockerRuleFactory_RULE_NAME=GCs Caused by GC Locker # {0} is a percentage -GcLockerRuleFactory_TEXT_INFO=The GC Locker caused {0} of the garbage collections. -GcLockerRuleFactory_TEXT_INFO_LONG=Garbage collections caused by the GC Locker indicates that the runtime ran a lot of JNI code. To avoid this decrease the time spent in JNI. -GcLockerRuleFactory_TEXT_OK=The GC Locker did not cause any garbage collections. +GcLockerRuleFactory_TEXT_INFO={0} of the garbage collections were affected by GC Locker. +GcLockerRuleFactory_TEXT_INFO_LONG=Garbage collections affected by GC Locker indicates that the runtime ran JNI code (using JNI Get*Critical) to (possibly) gain direct access to a string or an array. Some garbage collectors will need for the object to be released before being able to proceed. If this becomes a big problem, either avoid relying on (JNI) code requiring this behavior or switch to a garbage collection algorithm which handles this more graciously (for example pinning the object or pinning the memory region wherein it is located). +GcLockerRuleFactory_TEXT_OK=No GCs were affected by the GC Locker. GcStallRule_RULE_NAME=GC Stall GcStallRule_TEXT_OK=No indications that the garbage collector could not keep up with the workload were detected. General_CONFIG_CLASS_LIMIT=Class limit