Mercurial > hg > graal-jvmci-8
comparison src/share/vm/services/memTracker.cpp @ 6882:716c64bda5ba
7199092: NMT: NMT needs to deal overlapped virtual memory ranges
Summary: Enhanced virtual memory tracking to track committed regions as well as reserved regions, so NMT now can generate virtual memory map.
Reviewed-by: acorn, coleenp
author | zgu |
---|---|
date | Fri, 19 Oct 2012 21:40:07 -0400 |
parents | b711844284e2 |
children | bbc14465e7db |
comparison
equal
deleted
inserted
replaced
6879:8ebcedb7604d | 6882:716c64bda5ba |
---|---|
362 } | 362 } |
363 } | 363 } |
364 | 364 |
365 if (thread != NULL) { | 365 if (thread != NULL) { |
366 if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { | 366 if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { |
367 JavaThread* java_thread = static_cast<JavaThread*>(thread); | 367 JavaThread* java_thread = (JavaThread*)thread; |
368 JavaThreadState state = java_thread->thread_state(); | 368 JavaThreadState state = java_thread->thread_state(); |
369 if (SafepointSynchronize::safepoint_safe(java_thread, state)) { | 369 if (SafepointSynchronize::safepoint_safe(java_thread, state)) { |
370 // JavaThreads that are safepoint safe, can run through safepoint, | 370 // JavaThreads that are safepoint safe, can run through safepoint, |
371 // so ThreadCritical is needed to ensure no threads at safepoint create | 371 // so ThreadCritical is needed to ensure no threads at safepoint create |
372 // new records while the records are being gathered and the sequence number is changing | 372 // new records while the records are being gathered and the sequence number is changing |
470 { | 470 { |
471 // This method is running at safepoint, with ThreadCritical lock, | 471 // This method is running at safepoint, with ThreadCritical lock, |
472 // it should guarantee that NMT is fully sync-ed. | 472 // it should guarantee that NMT is fully sync-ed. |
473 ThreadCritical tc; | 473 ThreadCritical tc; |
474 | 474 |
475 SequenceGenerator::reset(); | |
476 | |
475 // walk all JavaThreads to collect recorders | 477 // walk all JavaThreads to collect recorders |
476 SyncThreadRecorderClosure stc; | 478 SyncThreadRecorderClosure stc; |
477 Threads::threads_do(&stc); | 479 Threads::threads_do(&stc); |
478 | 480 |
479 _thread_count = stc.get_thread_count(); | 481 _thread_count = stc.get_thread_count(); |
482 if (_global_recorder != NULL) { | 484 if (_global_recorder != NULL) { |
483 _global_recorder->set_next(pending_recorders); | 485 _global_recorder->set_next(pending_recorders); |
484 pending_recorders = _global_recorder; | 486 pending_recorders = _global_recorder; |
485 _global_recorder = NULL; | 487 _global_recorder = NULL; |
486 } | 488 } |
487 SequenceGenerator::reset(); | |
488 // check _worker_thread with lock to avoid racing condition | 489 // check _worker_thread with lock to avoid racing condition |
489 if (_worker_thread != NULL) { | 490 if (_worker_thread != NULL) { |
490 _worker_thread->at_sync_point(pending_recorders); | 491 _worker_thread->at_sync_point(pending_recorders); |
491 } | 492 } |
493 | |
494 assert(SequenceGenerator::peek() == 1, "Should not have memory activities during sync-point"); | |
492 } | 495 } |
493 } | 496 } |
494 | 497 |
495 // now, it is the time to shut whole things off | 498 // now, it is the time to shut whole things off |
496 if (_state == NMT_final_shutdown) { | 499 if (_state == NMT_final_shutdown) { |