Mercurial > hg > truffle
comparison src/share/vm/runtime/sweeper.cpp @ 12266:ab274453d37f
8022883: Assertion failed: sweptCount >= flushedCount + markedCount + zombifiedCount
Summary: Provide correct number of visited nmethods to Tracing
Reviewed-by: kvn, iveresov
author | anoll |
---|---|
date | Wed, 18 Sep 2013 07:22:20 +0200 |
parents | f2110083203d |
children | 510fbd28919c |
comparison
equal
deleted
inserted
replaced
12263:a4788ba67e20 | 12266:ab274453d37f |
---|---|
267 // invocations so divide the remaining number of nmethods by the | 267 // invocations so divide the remaining number of nmethods by the |
268 // remaining number of invocations. This is only an estimate since | 268 // remaining number of invocations. This is only an estimate since |
269 // the number of nmethods changes during the sweep so the final | 269 // the number of nmethods changes during the sweep so the final |
270 // stage must iterate until it there are no more nmethods. | 270 // stage must iterate until it there are no more nmethods. |
271 int todo = (CodeCache::nof_nmethods() - _seen) / _invocations; | 271 int todo = (CodeCache::nof_nmethods() - _seen) / _invocations; |
272 int swept_count = 0; | |
272 | 273 |
273 assert(!SafepointSynchronize::is_at_safepoint(), "should not be in safepoint when we get here"); | 274 assert(!SafepointSynchronize::is_at_safepoint(), "should not be in safepoint when we get here"); |
274 assert(!CodeCache_lock->owned_by_self(), "just checking"); | 275 assert(!CodeCache_lock->owned_by_self(), "just checking"); |
275 | 276 |
276 { | 277 { |
277 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); | 278 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); |
278 | 279 |
279 // The last invocation iterates until there are no more nmethods | 280 // The last invocation iterates until there are no more nmethods |
280 for (int i = 0; (i < todo || _invocations == 1) && _current != NULL; i++) { | 281 for (int i = 0; (i < todo || _invocations == 1) && _current != NULL; i++) { |
282 swept_count++; | |
281 if (SafepointSynchronize::is_synchronizing()) { // Safepoint request | 283 if (SafepointSynchronize::is_synchronizing()) { // Safepoint request |
282 if (PrintMethodFlushing && Verbose) { | 284 if (PrintMethodFlushing && Verbose) { |
283 tty->print_cr("### Sweep at %d out of %d, invocation: %d, yielding to safepoint", _seen, CodeCache::nof_nmethods(), _invocations); | 285 tty->print_cr("### Sweep at %d out of %d, invocation: %d, yielding to safepoint", _seen, CodeCache::nof_nmethods(), _invocations); |
284 } | 286 } |
285 MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); | 287 MutexUnlockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); |
329 if (event.should_commit()) { | 331 if (event.should_commit()) { |
330 event.set_starttime(sweep_start_counter); | 332 event.set_starttime(sweep_start_counter); |
331 event.set_endtime(sweep_end_counter); | 333 event.set_endtime(sweep_end_counter); |
332 event.set_sweepIndex(_traversals); | 334 event.set_sweepIndex(_traversals); |
333 event.set_sweepFractionIndex(NmethodSweepFraction - _invocations + 1); | 335 event.set_sweepFractionIndex(NmethodSweepFraction - _invocations + 1); |
334 event.set_sweptCount(todo); | 336 event.set_sweptCount(swept_count); |
335 event.set_flushedCount(_flushed_count); | 337 event.set_flushedCount(_flushed_count); |
336 event.set_markedCount(_marked_count); | 338 event.set_markedCount(_marked_count); |
337 event.set_zombifiedCount(_zombified_count); | 339 event.set_zombifiedCount(_zombified_count); |
338 event.commit(); | 340 event.commit(); |
339 } | 341 } |