comparison src/share/vm/gc_implementation/concurrentMarkSweep/freeList.hpp @ 12:6432c3bb6240

6668743: CMS: Consolidate block statistics reporting code Summary: Reduce the amount of related code replication and improve pretty printing. Reviewed-by: jmasa
author ysr
date Fri, 29 Feb 2008 14:42:56 -0800
parents a61af66fc99e
children c70a245cad3a
comparison
equal deleted inserted replaced
11:3c1dbcaaab1d 12:6432c3bb6240
36 36
37 class Mutex; 37 class Mutex;
38 38
39 class FreeList VALUE_OBJ_CLASS_SPEC { 39 class FreeList VALUE_OBJ_CLASS_SPEC {
40 friend class CompactibleFreeListSpace; 40 friend class CompactibleFreeListSpace;
41 friend class printTreeCensusClosure;
41 FreeChunk* _head; // List of free chunks 42 FreeChunk* _head; // List of free chunks
42 FreeChunk* _tail; // Tail of list of free chunks 43 FreeChunk* _tail; // Tail of list of free chunks
43 size_t _size; // Size in Heap words of each chunks 44 size_t _size; // Size in Heap words of each chunks
44 ssize_t _count; // Number of entries in list 45 ssize_t _count; // Number of entries in list
45 size_t _hint; // next larger size list with a positive surplus 46 size_t _hint; // next larger size list with a positive surplus
61 62
62 // Initialize the allocation statistics. 63 // Initialize the allocation statistics.
63 protected: 64 protected:
64 void init_statistics(); 65 void init_statistics();
65 void set_count(ssize_t v) { _count = v;} 66 void set_count(ssize_t v) { _count = v;}
66 void increment_count() { _count++; } 67 void increment_count() { _count++; }
67 void decrement_count() { 68 void decrement_count() {
68 _count--; 69 _count--;
69 assert(_count >= 0, "Count should not be negative"); } 70 assert(_count >= 0, "Count should not be negative");
71 }
70 72
71 public: 73 public:
72 // Constructor 74 // Constructor
73 // Construct a list without any entries. 75 // Construct a list without any entries.
74 FreeList(); 76 FreeList();
156 return &_allocation_stats; 158 return &_allocation_stats;
157 } 159 }
158 160
159 ssize_t desired() const { 161 ssize_t desired() const {
160 return _allocation_stats.desired(); 162 return _allocation_stats.desired();
163 }
164 void set_desired(ssize_t v) {
165 assert_proper_lock_protection();
166 _allocation_stats.set_desired(v);
161 } 167 }
162 void compute_desired(float inter_sweep_current, 168 void compute_desired(float inter_sweep_current,
163 float inter_sweep_estimate) { 169 float inter_sweep_estimate) {
164 assert_proper_lock_protection(); 170 assert_proper_lock_protection();
165 _allocation_stats.compute_desired(_count, 171 _allocation_stats.compute_desired(_count,
296 void prepend(FreeList* fl); 302 void prepend(FreeList* fl);
297 303
298 // Verify that the chunk is in the list. 304 // Verify that the chunk is in the list.
299 // found. Return NULL if "fc" is not found. 305 // found. Return NULL if "fc" is not found.
300 bool verifyChunkInFreeLists(FreeChunk* fc) const; 306 bool verifyChunkInFreeLists(FreeChunk* fc) const;
307
308 // Printing support
309 static void print_labels_on(outputStream* st, const char* c);
310 void print_on(outputStream* st, const char* c = NULL) const;
301 }; 311 };