8035735: Metaspace::contains become extremely slow in some cases

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
This commit is contained in:
Coleen Phillimore 2014-03-03 13:58:52 -05:00
parent 4482a30c61
commit 1a95f3a409
2 changed files with 4 additions and 3 deletions

View File

@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -273,8 +273,8 @@ class DebugInfoReadStream : public CompressedReadStream {
} }
Method* read_method() { Method* read_method() {
Method* o = (Method*)(code()->metadata_at(read_int())); Method* o = (Method*)(code()->metadata_at(read_int()));
assert(o == NULL || // is_metadata() is a faster check than is_metaspace_object()
o->is_metaspace_object(), "meta data only"); assert(o == NULL || o->is_metadata(), "meta data only");
return o; return o;
} }
ScopeValue* read_object_value(); ScopeValue* read_object_value();

View File

@ -42,6 +42,7 @@ class Metadata : public MetaspaceObj {
// Rehashing support for tables containing pointers to this // Rehashing support for tables containing pointers to this
unsigned int new_hash(juint seed) { ShouldNotReachHere(); return 0; } 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_klass() const volatile { return false; }
virtual bool is_method() const volatile { return false; } virtual bool is_method() const volatile { return false; }
virtual bool is_methodData() const volatile { return false; } virtual bool is_methodData() const volatile { return false; }