< prev index next >
src/hotspot/share/runtime/sharedRuntime.cpp
Print this page
@@ -2153,12 +2153,12 @@
static int _size_histogram[MAX_ARITY]; // histogram of arg size in words
static int _max_arity; // max. arity seen
static int _max_size; // max. arg size seen
static void add_method_to_histogram(nmethod* nm) {
- if (CompiledMethod::nmethod_access_is_safe(nm)) {
- Method* method = nm->method();
+ Method* method = (nm == NULL) ? NULL : nm->method();
+ if ((method != NULL) && nm->is_alive()) {
ArgumentCount args(method->signature());
int arity = args.size() + (method->is_static() ? 0 : 1);
int argsize = method->size_of_parameters();
arity = MIN2(arity, MAX_ARITY-1);
argsize = MIN2(argsize, MAX_ARITY-1);
@@ -2195,11 +2195,14 @@
tty->cr();
}
public:
MethodArityHistogram() {
- MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
+ // Take the Compile_lock to protect against changes in the CodeBlob structures
+ MutexLockerEx mu1(Compile_lock, Mutex::_no_safepoint_check_flag);
+ // Take the CodeCache_lock to protect against changes in the CodeHeap structure
+ MutexLockerEx mu2(CodeCache_lock, Mutex::_no_safepoint_check_flag);
_max_arity = _max_size = 0;
for (int i = 0; i < MAX_ARITY; i++) _arity_histogram[i] = _size_histogram[i] = 0;
CodeCache::nmethods_do(add_method_to_histogram);
print_histogram();
}
< prev index next >