comparison src/share/vm/runtime/thread.hpp @ 6197:d2a62e0f25eb

6995781: Native Memory Tracking (Phase 1) 7151532: DCmd for hotspot native memory tracking Summary: Implementation of native memory tracking phase 1, which tracks VM native memory usage, and related DCmd Reviewed-by: acorn, coleenp, fparain
author zgu
date Thu, 28 Jun 2012 17:03:16 -0400
parents 541c4a5e7b88
children 957c266d8bc5 da91efe96a93
comparison
equal deleted inserted replaced
6174:74533f63b116 6197:d2a62e0f25eb
39 #include "runtime/park.hpp" 39 #include "runtime/park.hpp"
40 #include "runtime/safepoint.hpp" 40 #include "runtime/safepoint.hpp"
41 #include "runtime/stubRoutines.hpp" 41 #include "runtime/stubRoutines.hpp"
42 #include "runtime/threadLocalStorage.hpp" 42 #include "runtime/threadLocalStorage.hpp"
43 #include "runtime/unhandledOops.hpp" 43 #include "runtime/unhandledOops.hpp"
44 #include "services/memRecorder.hpp"
44 #include "trace/tracing.hpp" 45 #include "trace/tracing.hpp"
45 #include "utilities/exceptions.hpp" 46 #include "utilities/exceptions.hpp"
46 #include "utilities/top.hpp" 47 #include "utilities/top.hpp"
47 #ifndef SERIALGC 48 #ifndef SERIALGC
48 #include "gc_implementation/g1/dirtyCardQueue.hpp" 49 #include "gc_implementation/g1/dirtyCardQueue.hpp"
98 // Exception handling 99 // Exception handling
99 // (Note: _pending_exception and friends are in ThreadShadow) 100 // (Note: _pending_exception and friends are in ThreadShadow)
100 //oop _pending_exception; // pending exception for current thread 101 //oop _pending_exception; // pending exception for current thread
101 // const char* _exception_file; // file information for exception (debugging only) 102 // const char* _exception_file; // file information for exception (debugging only)
102 // int _exception_line; // line information for exception (debugging only) 103 // int _exception_line; // line information for exception (debugging only)
103 104 protected:
104 // Support for forcing alignment of thread objects for biased locking 105 // Support for forcing alignment of thread objects for biased locking
105 void* _real_malloc_address; 106 void* _real_malloc_address;
106 public: 107 public:
107 void* operator new(size_t size); 108 void* operator new(size_t size) { return allocate(size, true); }
109 void* operator new(size_t size, std::nothrow_t& nothrow_constant) { return allocate(size, false); }
108 void operator delete(void* p); 110 void operator delete(void* p);
111
112 protected:
113 static void* allocate(size_t size, bool throw_excpt, MEMFLAGS flags = mtThread);
109 private: 114 private:
110 115
111 // *************************************************************** 116 // ***************************************************************
112 // Suspend and resume support 117 // Suspend and resume support
113 // *************************************************************** 118 // ***************************************************************
546 void print_on(outputStream* st) const; 551 void print_on(outputStream* st) const;
547 void print() const { print_on(tty); } 552 void print() const { print_on(tty); }
548 virtual void print_on_error(outputStream* st, char* buf, int buflen) const; 553 virtual void print_on_error(outputStream* st, char* buf, int buflen) const;
549 554
550 // Debug-only code 555 // Debug-only code
551
552 #ifdef ASSERT 556 #ifdef ASSERT
553 private: 557 private:
554 // Deadlock detection support for Mutex locks. List of locks own by thread. 558 // Deadlock detection support for Mutex locks. List of locks own by thread.
555 Monitor* _owned_locks; 559 Monitor* _owned_locks;
556 // Mutex::set_owner_implementation is the only place where _owned_locks is modified, 560 // Mutex::set_owner_implementation is the only place where _owned_locks is modified,
1025 void set_doing_unsafe_access(bool val) { _doing_unsafe_access = val; } 1029 void set_doing_unsafe_access(bool val) { _doing_unsafe_access = val; }
1026 1030
1027 bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; } 1031 bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; }
1028 void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; } 1032 void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; }
1029 1033
1034 // native memory tracking
1035 inline MemRecorder* get_recorder() const { return (MemRecorder*)_recorder; }
1036 inline void set_recorder(MemRecorder* rc) { _recorder = (volatile MemRecorder*)rc; }
1037
1038 private:
1039 // per-thread memory recorder
1040 volatile MemRecorder* _recorder;
1030 1041
1031 // Suspend/resume support for JavaThread 1042 // Suspend/resume support for JavaThread
1032
1033 private: 1043 private:
1034 void set_ext_suspended() { set_suspend_flag (_ext_suspended); } 1044 void set_ext_suspended() { set_suspend_flag (_ext_suspended); }
1035 void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); } 1045 void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); }
1036 1046
1037 public: 1047 public:
1450 ThreadProfiler* set_thread_profiler(ThreadProfiler* tp) { 1460 ThreadProfiler* set_thread_profiler(ThreadProfiler* tp) {
1451 ThreadProfiler* result = _thread_profiler; 1461 ThreadProfiler* result = _thread_profiler;
1452 _thread_profiler = tp; 1462 _thread_profiler = tp;
1453 return result; 1463 return result;
1454 } 1464 }
1465
1466 // NMT (Native memory tracking) support.
1467 // This flag helps NMT to determine if this JavaThread will be blocked
1468 // at safepoint. If not, ThreadCritical is needed for writing memory records.
1469 // JavaThread is only safepoint visible when it is in Threads' thread list,
1470 // it is not visible until it is added to the list and becomes invisible
1471 // once it is removed from the list.
1472 public:
1473 bool is_safepoint_visible() const { return _safepoint_visible; }
1474 void set_safepoint_visible(bool visible) { _safepoint_visible = visible; }
1475 private:
1476 bool _safepoint_visible;
1455 1477
1456 // Static operations 1478 // Static operations
1457 public: 1479 public:
1458 // Returns the running thread as a JavaThread 1480 // Returns the running thread as a JavaThread
1459 static inline JavaThread* current(); 1481 static inline JavaThread* current();