diff src/share/vm/graal/graalCompiler.cpp @ 9126:bc26f978b0ce

HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly don't use the (wrong) cached value, but ask the runtime on each request. Fixes regression on xml.* benchmarks @ specjvm2008. The problem was: After the constructor of Object was deoptimized due to an assumption violation, it was recompiled again after some time. However, on recompilation, the value of hasFinalizeSubclass for the class was not updated and it was compiled again with a, now wrong, assumption, which then triggers deoptimization again. This was repeated until it hit the recompilation limit (defined by PerMethodRecompilationCutoff), and therefore only executed by the interpreter from now on, causing the performance regression.
author Bernhard Urban <bernhard.urban@jku.at>
date Mon, 15 Apr 2013 19:54:58 +0200
parents b78686983a75
children 147162b27799
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompiler.cpp	Fri Apr 12 11:06:19 2013 +0200
+++ b/src/share/vm/graal/graalCompiler.cpp	Mon Apr 15 19:54:58 2013 +0200
@@ -293,9 +293,6 @@
     name = java_lang_String::create_from_str(ik->signature_name(), CHECK_NULL);
   }
 
-  // TODO replace this with the correct value
-  bool hasFinalizableSubclass = false;
-
   int sizeOrSpecies;
   if (klass->is_interface()) {
     sizeOrSpecies = (int) 0x80000000; // see HotSpotResolvedObjectType.INTERFACE_SPECIES_VALUE
@@ -308,7 +305,7 @@
     }
   }
 
-  return VMToCompiler::createResolvedJavaType(klass(), name, simpleName, java_class, hasFinalizableSubclass, sizeOrSpecies, CHECK_NULL);
+  return VMToCompiler::createResolvedJavaType(klass(), name, simpleName, java_class, sizeOrSpecies, CHECK_NULL);
 }
 
 BasicType GraalCompiler::kindToBasicType(jchar ch) {