419 NOT_PRODUCT(static void print_tracker_stats(outputStream* st);) |
419 NOT_PRODUCT(static void print_tracker_stats(outputStream* st);) |
420 NOT_PRODUCT(static void walk_stack(int toSkip, char* buf, int len);) |
420 NOT_PRODUCT(static void walk_stack(int toSkip, char* buf, int len);) |
421 |
421 |
422 private: |
422 private: |
423 // start native memory tracking worker thread |
423 // start native memory tracking worker thread |
424 static bool start_worker(); |
424 static bool start_worker(MemSnapshot* snapshot); |
425 |
425 |
426 // called by worker thread to complete shutdown process |
426 // called by worker thread to complete shutdown process |
427 static void final_shutdown(); |
427 static void final_shutdown(); |
428 |
428 |
429 protected: |
429 protected: |
473 static Mutex* _query_lock; |
473 static Mutex* _query_lock; |
474 |
474 |
475 // a thread can start to allocate memory before it is attached |
475 // a thread can start to allocate memory before it is attached |
476 // to VM 'Thread', those memory activities are recorded here. |
476 // to VM 'Thread', those memory activities are recorded here. |
477 // ThreadCritical is required to guard this global recorder. |
477 // ThreadCritical is required to guard this global recorder. |
478 static MemRecorder* _global_recorder; |
478 static MemRecorder* volatile _global_recorder; |
479 |
479 |
480 // main thread id |
480 // main thread id |
481 debug_only(static intx _main_thread_tid;) |
481 debug_only(static intx _main_thread_tid;) |
482 |
482 |
483 // pending recorders to be merged |
483 // pending recorders to be merged |
484 static volatile MemRecorder* _merge_pending_queue; |
484 static MemRecorder* volatile _merge_pending_queue; |
485 |
485 |
486 NOT_PRODUCT(static volatile jint _pending_recorder_count;) |
486 NOT_PRODUCT(static volatile jint _pending_recorder_count;) |
487 |
487 |
488 // pooled memory recorders |
488 // pooled memory recorders |
489 static volatile MemRecorder* _pooled_recorders; |
489 static MemRecorder* volatile _pooled_recorders; |
490 |
490 |
491 // memory recorder pool management, uses following |
491 // memory recorder pool management, uses following |
492 // counter to determine if a released memory recorder |
492 // counter to determine if a released memory recorder |
493 // should be pooled |
493 // should be pooled |
494 |
494 |