annotate src/share/vm/services/memRecorder.cpp @ 8733:9def4075da6d

8008079: G1: Add nextObject routine to CMBitMapRO and replace nextWord Summary: Update the task local finger to the start of the next object when marking aborts, in order to avoid the redundant scanning of all 0's when the marking task restarts, if otherwise updating to the next word. In addition, reuse the routine nextObject() in routine iterate(). Reviewed-by: johnc, ysr Contributed-by: tamao <tao.mao@oracle.com>
author tamao
date Tue, 05 Mar 2013 15:36:56 -0800
parents 4102b59539ce
children 1f4355cee9a2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
1 /*
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
4 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
7 * published by the Free Software Foundation.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
8 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
13 * accompanied this code).
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
14 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
18 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
21 * questions.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
22 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
23 */
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
24
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
25 #include "precompiled.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
26
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
27 #include "runtime/atomic.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
28 #include "services/memBaseline.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
29 #include "services/memRecorder.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
30 #include "services/memPtr.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
31 #include "services/memTracker.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
32
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
33 MemPointer* SequencedRecordIterator::next_record() {
6882
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
34 MemPointerRecord* itr_cur = (MemPointerRecord*)_itr.current();
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
35 if (itr_cur == NULL) {
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
36 return itr_cur;
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
37 }
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
38
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
39 MemPointerRecord* itr_next = (MemPointerRecord*)_itr.next();
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
40
6882
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
41 // don't collapse virtual memory records
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
42 while (itr_next != NULL && !itr_cur->is_vm_pointer() &&
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
43 !itr_next->is_vm_pointer() &&
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
44 same_kind(itr_cur, itr_next)) {
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
45 itr_cur = itr_next;
6882
716c64bda5ba 7199092: NMT: NMT needs to deal overlapped virtual memory ranges
zgu
parents: 6231
diff changeset
46 itr_next = (MemPointerRecord*)_itr.next();
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
47 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
48
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
49 return itr_cur;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
50 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
51
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
52
6231
7e5976e66c62 7182543: NMT ON: Aggregate a few NMT related bugs
zgu
parents: 6197
diff changeset
53 volatile jint MemRecorder::_instance_count = 0;
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
54
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
55 MemRecorder::MemRecorder() {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
56 assert(MemTracker::is_on(), "Native memory tracking is off");
6231
7e5976e66c62 7182543: NMT ON: Aggregate a few NMT related bugs
zgu
parents: 6197
diff changeset
57 Atomic::inc(&_instance_count);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 7464
diff changeset
58 set_generation();
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
59
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
60 if (MemTracker::track_callsite()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
61 _pointer_records = new (std::nothrow)FixedSizeMemPointerArray<SeqMemPointerRecordEx,
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
62 DEFAULT_RECORDER_PTR_ARRAY_SIZE>();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
63 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
64 _pointer_records = new (std::nothrow)FixedSizeMemPointerArray<SeqMemPointerRecord,
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
65 DEFAULT_RECORDER_PTR_ARRAY_SIZE>();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
66 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
67 _next = NULL;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
68
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
69
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
70 if (_pointer_records != NULL) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
71 // recode itself
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
72 record((address)this, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
73 sizeof(MemRecorder), CALLER_PC);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
74 record((address)_pointer_records, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
75 _pointer_records->instance_size(),CURRENT_PC);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
76 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
77 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
78
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
79 MemRecorder::~MemRecorder() {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
80 if (_pointer_records != NULL) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
81 if (MemTracker::is_on()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
82 MemTracker::record_free((address)_pointer_records, mtNMT);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
83 MemTracker::record_free((address)this, mtNMT);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
84 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
85 delete _pointer_records;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
86 }
7464
ecd24264898b 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 6882
diff changeset
87 // delete all linked recorders
ecd24264898b 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 6882
diff changeset
88 while (_next != NULL) {
ecd24264898b 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 6882
diff changeset
89 MemRecorder* tmp = _next;
ecd24264898b 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 6882
diff changeset
90 _next = _next->next();
ecd24264898b 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 6882
diff changeset
91 tmp->set_next(NULL);
ecd24264898b 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 6882
diff changeset
92 delete tmp;
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
93 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
94 Atomic::dec(&_instance_count);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
95 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
96
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
97 // Sorting order:
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
98 // 1. memory block address
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
99 // 2. mem pointer record tags
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
100 // 3. sequence number
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
101 int MemRecorder::sort_record_fn(const void* e1, const void* e2) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
102 const MemPointerRecord* p1 = (const MemPointerRecord*)e1;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
103 const MemPointerRecord* p2 = (const MemPointerRecord*)e2;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
104 int delta = UNSIGNED_COMPARE(p1->addr(), p2->addr());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
105 if (delta == 0) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
106 int df = UNSIGNED_COMPARE((p1->flags() & MemPointerRecord::tag_masks),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
107 (p2->flags() & MemPointerRecord::tag_masks));
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
108 if (df == 0) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
109 assert(p1->seq() != p2->seq(), "dup seq");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
110 return p1->seq() - p2->seq();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
111 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
112 return df;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
113 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
114 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
115 return delta;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
116 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
117 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
118
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
119 bool MemRecorder::record(address p, MEMFLAGS flags, size_t size, address pc) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
120 #ifdef ASSERT
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
121 if (MemPointerRecord::is_virtual_memory_record(flags)) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
122 assert((flags & MemPointerRecord::tag_masks) != 0, "bad virtual memory record");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
123 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
124 assert((flags & MemPointerRecord::tag_masks) == MemPointerRecord::malloc_tag() ||
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
125 (flags & MemPointerRecord::tag_masks) == MemPointerRecord::free_tag() ||
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
126 IS_ARENA_OBJ(flags),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
127 "bad malloc record");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
128 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
129 // a recorder should only hold records within the same generation
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
130 unsigned long cur_generation = SequenceGenerator::current_generation();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
131 assert(cur_generation == _generation,
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
132 "this thread did not enter sync point");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
133 #endif
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
134
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
135 if (MemTracker::track_callsite()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
136 SeqMemPointerRecordEx ap(p, flags, size, pc);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
137 debug_only(check_dup_seq(ap.seq());)
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
138 return _pointer_records->append(&ap);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
139 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
140 SeqMemPointerRecord ap(p, flags, size);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
141 debug_only(check_dup_seq(ap.seq());)
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
142 return _pointer_records->append(&ap);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
143 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
144 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
145
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
146 // iterator for alloc pointers
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
147 SequencedRecordIterator MemRecorder::pointer_itr() {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
148 assert(_pointer_records != NULL, "just check");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
149 _pointer_records->sort((FN_SORT)sort_record_fn);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
150 return SequencedRecordIterator(_pointer_records);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
151 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
152
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
153
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
154 void MemRecorder::set_generation() {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
155 _generation = SequenceGenerator::current_generation();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
156 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
157
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 7464
diff changeset
158 #ifdef ASSERT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 7464
diff changeset
159
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
160 void MemRecorder::check_dup_seq(jint seq) const {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
161 MemPointerArrayIteratorImpl itr(_pointer_records);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
162 MemPointerRecord* rc = (MemPointerRecord*)itr.current();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
163 while (rc != NULL) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
164 assert(rc->seq() != seq, "dup seq");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
165 rc = (MemPointerRecord*)itr.next();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
166 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
167 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
168
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
169 #endif