8044416: serviceability/sa/jmap-hashcode/Test8028623.java fails with AssertionFailure: can not get class data for java/lang/UNIXProcess$Platform$$Lambda
Summary: Lambda object is not counted when SA builds class data cache but is reached inside live region.
Reviewed-by: sla, jbachorik
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Wed Apr 08 12:51:50 2015 +0200
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Fri Apr 10 05:22:56 2015 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2015, 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
@@ -799,6 +799,18 @@
writeObjectID(klass.getJavaMirror());
ClassData cd = (ClassData) classDataCache.get(klass);
+ if (cd == null) {
+ // The class is not present in the system dictionary, probably Lambda.
+ // Add it to cache here
+ if (klass instanceof InstanceKlass) {
+ InstanceKlass ik = (InstanceKlass) klass;
+ List fields = getInstanceFields(ik);
+ int instSize = getSizeForFields(fields);
+ cd = new ClassData(instSize, fields);
+ classDataCache.put(ik, cd);
+ }
+ }
+
if (Assert.ASSERTS_ENABLED) {
Assert.that(cd != null, "can not get class data for " + klass.getName().asString() + klass.getAddress());
}
--- a/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java Wed Apr 08 12:51:50 2015 +0200
+++ b/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java Fri Apr 10 05:22:56 2015 -0700
@@ -30,7 +30,6 @@
* java.compiler
* java.management
* jdk.jvmstat/sun.jvmstat.monitor
- * @ignore 8044416
* @build com.oracle.java.testlibrary.*
* @compile -encoding utf8 Test8028623.java
* @run main Test8028623