comparison src/share/vm/oops/markOop.cpp @ 22833:6e8e0bf87bbe

8069412: Locks need better debug-printing support Summary: Added better debug-printing support and enhanced LogCompilation tool Reviewed-by: kvn, roland, dholmes
author drchase
date Fri, 20 Feb 2015 22:12:53 -0500
parents 78bbf4d43a14
children
comparison
equal deleted inserted replaced
22832:9d6eb2757167 22833:6e8e0bf87bbe
1 /* 1 /*
2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "oops/markOop.hpp" 26 #include "oops/markOop.hpp"
27 #include "runtime/thread.inline.hpp" 27 #include "runtime/thread.inline.hpp"
28 #include "runtime/objectMonitor.inline.hpp"
28 29
29 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC 30 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
30 31
31 void markOopDesc::print_on(outputStream* st) const { 32 void markOopDesc::print_on(outputStream* st) const {
32 if (is_locked()) { 33 if (is_marked()) {
33 st->print("locked(" INTPTR_FORMAT ")->", value()); 34 st->print(" marked(" INTPTR_FORMAT ")", value());
34 markOop(*(markOop*)value())->print_on(st); 35 } else if (is_locked()) {
36 st->print(" locked(" INTPTR_FORMAT ")->", value());
37 if (is_neutral()) {
38 st->print("is_neutral");
39 if (has_no_hash()) st->print(" no_hash");
40 else st->print(" hash=" INTPTR_FORMAT, hash());
41 st->print(" age=%d", age());
42 } else if (has_bias_pattern()) {
43 st->print("is_biased");
44 JavaThread* jt = biased_locker();
45 st->print(" biased_locker=" INTPTR_FORMAT, p2i(jt));
46 } else if (has_monitor()) {
47 ObjectMonitor* mon = monitor();
48 if (mon == NULL)
49 st->print("monitor=NULL");
50 else {
51 BasicLock * bl = (BasicLock *) mon->owner();
52 st->print("monitor={count="INTPTR_FORMAT",waiters="INTPTR_FORMAT",recursions="INTPTR_FORMAT",owner="INTPTR_FORMAT"}",
53 mon->count(), mon->waiters(), mon->recursions(), p2i(bl));
54 }
55 } else {
56 st->print("??");
57 }
35 } else { 58 } else {
36 assert(is_unlocked() || has_bias_pattern(), "just checking"); 59 assert(is_unlocked() || has_bias_pattern(), "just checking");
37 st->print("mark("); 60 st->print("mark(");
38 if (has_bias_pattern()) st->print("biased,"); 61 if (has_bias_pattern()) st->print("biased,");
39 st->print("hash %#lx,", hash()); 62 st->print("hash %#lx,", hash());
40 st->print("age %d)", age()); 63 st->print("age %d)", age());
41 } 64 }
42 } 65 }