src/share/vm/services/memRecorder.hpp

Print this page
rev 3901 : JDK-8005012: Add WB APIs to better support NMT testing
Summary:


 195   }
 196 };
 197 
 198 
 199 
 200 #define DEFAULT_RECORDER_PTR_ARRAY_SIZE 512
 201 
 202 class MemRecorder : public CHeapObj<mtNMT|otNMTRecorder> {
 203   friend class MemSnapshot;
 204   friend class MemTracker;
 205   friend class MemTrackWorker;
 206 
 207  protected:
 208   // the array that holds memory records
 209   MemPointerArray*         _pointer_records;
 210 
 211  private:
 212   // used for linked list
 213   MemRecorder*             _next;
 214   // active recorder can only record a certain generation data
 215   debug_only(unsigned long _generation;)
 216 
 217  protected:
 218   _NOINLINE_ MemRecorder();
 219   ~MemRecorder();
 220 
 221   // record a memory operation
 222   bool record(address addr, MEMFLAGS flags, size_t size, address caller_pc = 0);
 223 
 224   // linked list support
 225   inline void set_next(MemRecorder* rec) {
 226     _next = rec;
 227   }
 228 
 229   inline MemRecorder* next() const {
 230     return _next;
 231   }
 232 
 233   // if the recorder is full
 234   inline bool is_full() const {
 235     assert(_pointer_records != NULL, "just check");
 236     return _pointer_records->is_full();
 237   }
 238 
 239   // if running out of memory when initializing recorder's internal
 240   // data
 241   inline bool out_of_memory() const {
 242     return (_pointer_records == NULL ||
 243       _pointer_records->out_of_memory());
 244   }
 245 
 246   inline void clear() {
 247     assert(_pointer_records != NULL, "Just check");
 248     _pointer_records->clear();
 249   }
 250 
 251   SequencedRecordIterator pointer_itr();
 252 


 253  protected:
 254   // number of MemRecorder instance
 255   static volatile jint _instance_count;
 256 
 257  private:
 258   // sorting function, sort records into following order
 259   // 1. memory address
 260   // 2. allocation type
 261   // 3. sequence number
 262   static int sort_record_fn(const void* e1, const void* e2);
 263 
 264   debug_only(void check_dup_seq(jint seq) const;)
 265   debug_only(void set_generation();)
 266 };
 267 
 268 #endif // SHARE_VM_SERVICES_MEM_RECORDER_HPP


 195   }
 196 };
 197 
 198 
 199 
 200 #define DEFAULT_RECORDER_PTR_ARRAY_SIZE 512
 201 
 202 class MemRecorder : public CHeapObj<mtNMT|otNMTRecorder> {
 203   friend class MemSnapshot;
 204   friend class MemTracker;
 205   friend class MemTrackWorker;
 206 
 207  protected:
 208   // the array that holds memory records
 209   MemPointerArray*         _pointer_records;
 210 
 211  private:
 212   // used for linked list
 213   MemRecorder*             _next;
 214   // active recorder can only record a certain generation data
 215   unsigned long            _generation;
 216 
 217  protected:
 218   _NOINLINE_ MemRecorder();
 219   ~MemRecorder();
 220 
 221   // record a memory operation
 222   bool record(address addr, MEMFLAGS flags, size_t size, address caller_pc = 0);
 223 
 224   // linked list support
 225   inline void set_next(MemRecorder* rec) {
 226     _next = rec;
 227   }
 228 
 229   inline MemRecorder* next() const {
 230     return _next;
 231   }
 232 
 233   // if the recorder is full
 234   inline bool is_full() const {
 235     assert(_pointer_records != NULL, "just check");
 236     return _pointer_records->is_full();
 237   }
 238 
 239   // if running out of memory when initializing recorder's internal
 240   // data
 241   inline bool out_of_memory() const {
 242     return (_pointer_records == NULL ||
 243       _pointer_records->out_of_memory());
 244   }
 245 
 246   inline void clear() {
 247     assert(_pointer_records != NULL, "Just check");
 248     _pointer_records->clear();
 249   }
 250 
 251   SequencedRecordIterator pointer_itr();
 252 
 253   // return the generation of this recorder which it belongs to
 254   unsigned long get_generation() const { return _generation; }
 255  protected:
 256   // number of MemRecorder instance
 257   static volatile jint _instance_count;
 258 
 259  private:
 260   // sorting function, sort records into following order
 261   // 1. memory address
 262   // 2. allocation type
 263   // 3. sequence number
 264   static int sort_record_fn(const void* e1, const void* e2);
 265 
 266   debug_only(void check_dup_seq(jint seq) const;)
 267   void set_generation();
 268 };
 269 
 270 #endif // SHARE_VM_SERVICES_MEM_RECORDER_HPP