8035735: Metaspace::contains become extremely slow in some cases
authorcoleenp
Mon, 03 Mar 2014 13:58:52 -0500
changeset 23182 6940057d6552
parent 23181 5e692cee40be
child 23183 20bf22818ffb
child 23184 060625af5ce9
child 23216 2f5c20eb1dc1
child 23225 ba1400d22145
8035735: Metaspace::contains become extremely slow in some cases Summary: Call is_metadata instead which does less work for the call in debugInfo.hpp which is called for all compiled code stack frames. Reviewed-by: jmasa, dcubed
hotspot/src/share/vm/code/debugInfo.hpp
hotspot/src/share/vm/oops/metadata.hpp
--- a/hotspot/src/share/vm/code/debugInfo.hpp	Sat Mar 01 09:56:15 2014 -0800
+++ b/hotspot/src/share/vm/code/debugInfo.hpp	Mon Mar 03 13:58:52 2014 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, 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
@@ -273,8 +273,8 @@
   }
   Method* read_method() {
     Method* o = (Method*)(code()->metadata_at(read_int()));
-    assert(o == NULL ||
-           o->is_metaspace_object(), "meta data only");
+    // is_metadata() is a faster check than is_metaspace_object()
+    assert(o == NULL || o->is_metadata(), "meta data only");
     return o;
   }
   ScopeValue* read_object_value();
--- a/hotspot/src/share/vm/oops/metadata.hpp	Sat Mar 01 09:56:15 2014 -0800
+++ b/hotspot/src/share/vm/oops/metadata.hpp	Mon Mar 03 13:58:52 2014 -0500
@@ -42,6 +42,7 @@
   // Rehashing support for tables containing pointers to this
   unsigned int new_hash(juint seed)   { ShouldNotReachHere();  return 0; }
 
+  virtual bool is_metadata()           const volatile { return true; }
   virtual bool is_klass()              const volatile { return false; }
   virtual bool is_method()             const volatile { return false; }
   virtual bool is_methodData()         const volatile { return false; }