156 message = message + " or ";
157 }
158 message = message + "SafepointBlob";
159 if (VM.getVM().isServerCompiler()) {
160 message = message + ", DeoptimizationBlob, or ExceptionBlob";
161 }
162 message = message + ")";
163 throw new RuntimeException(message);
164 }
165 }
166
167 public void iterate(CodeCacheVisitor visitor) {
168 CodeHeap heap = getHeap();
169 Address ptr = heap.begin();
170 Address end = heap.end();
171
172 visitor.prologue(ptr, end);
173 CodeBlob lastBlob = null;
174 while (ptr != null && ptr.lessThan(end)) {
175 try {
176 CodeBlob blob = findBlobUnsafe(ptr);
177 if (blob != null) {
178 visitor.visit(blob);
179 if (blob == lastBlob) {
180 throw new InternalError("saw same blob twice");
181 }
182 lastBlob = blob;
183 }
184 } catch (RuntimeException e) {
185 e.printStackTrace();
186 }
187 Address next = heap.nextBlock(ptr);
188 if (next != null && next.lessThan(ptr)) {
189 throw new InternalError("pointer moved backwards");
190 }
191 ptr = next;
192 }
193 visitor.epilogue();
194 }
195
196 //--------------------------------------------------------------------------------
|
156 message = message + " or ";
157 }
158 message = message + "SafepointBlob";
159 if (VM.getVM().isServerCompiler()) {
160 message = message + ", DeoptimizationBlob, or ExceptionBlob";
161 }
162 message = message + ")";
163 throw new RuntimeException(message);
164 }
165 }
166
167 public void iterate(CodeCacheVisitor visitor) {
168 CodeHeap heap = getHeap();
169 Address ptr = heap.begin();
170 Address end = heap.end();
171
172 visitor.prologue(ptr, end);
173 CodeBlob lastBlob = null;
174 while (ptr != null && ptr.lessThan(end)) {
175 try {
176 // Use findStart to get a pointer inside blob other findBlob asserts
177 CodeBlob blob = findBlobUnsafe(heap.findStart(ptr));
178 if (blob != null) {
179 visitor.visit(blob);
180 if (blob == lastBlob) {
181 throw new InternalError("saw same blob twice");
182 }
183 lastBlob = blob;
184 }
185 } catch (RuntimeException e) {
186 e.printStackTrace();
187 }
188 Address next = heap.nextBlock(ptr);
189 if (next != null && next.lessThan(ptr)) {
190 throw new InternalError("pointer moved backwards");
191 }
192 ptr = next;
193 }
194 visitor.epilogue();
195 }
196
197 //--------------------------------------------------------------------------------
|