# HG changeset patch # User coleenp # Date 1393873132 18000 # Node ID bd58c9e40d0ab2f1cfe2e9cc269f97f30c5c00ae # Parent cf9f24de0b93550428eba1b5218ec2d66f327454 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 diff -r cf9f24de0b93 -r bd58c9e40d0a src/share/vm/code/debugInfo.hpp --- a/src/share/vm/code/debugInfo.hpp Fri Apr 11 20:02:37 2014 +0000 +++ b/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(); diff -r cf9f24de0b93 -r bd58c9e40d0a src/share/vm/oops/metadata.hpp --- a/src/share/vm/oops/metadata.hpp Fri Apr 11 20:02:37 2014 +0000 +++ b/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; }