Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.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 | 7913e93dca52 |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6174:74533f63b116 | 6197:d2a62e0f25eb |
---|---|
39 class ParCompactionManager; | 39 class ParCompactionManager; |
40 class ObjectStartArray; | 40 class ObjectStartArray; |
41 class ParallelCompactData; | 41 class ParallelCompactData; |
42 class ParMarkBitMap; | 42 class ParMarkBitMap; |
43 | 43 |
44 class ParCompactionManager : public CHeapObj { | 44 class ParCompactionManager : public CHeapObj<mtGC> { |
45 friend class ParallelTaskTerminator; | 45 friend class ParallelTaskTerminator; |
46 friend class ParMarkBitMap; | 46 friend class ParMarkBitMap; |
47 friend class PSParallelCompact; | 47 friend class PSParallelCompact; |
48 friend class StealRegionCompactionTask; | 48 friend class StealRegionCompactionTask; |
49 friend class UpdateAndFillClosure; | 49 friend class UpdateAndFillClosure; |
64 // ------------------------ End don't putback if not needed | 64 // ------------------------ End don't putback if not needed |
65 | 65 |
66 private: | 66 private: |
67 // 32-bit: 4K * 8 = 32KiB; 64-bit: 8K * 16 = 128KiB | 67 // 32-bit: 4K * 8 = 32KiB; 64-bit: 8K * 16 = 128KiB |
68 #define QUEUE_SIZE (1 << NOT_LP64(12) LP64_ONLY(13)) | 68 #define QUEUE_SIZE (1 << NOT_LP64(12) LP64_ONLY(13)) |
69 typedef OverflowTaskQueue<ObjArrayTask, QUEUE_SIZE> ObjArrayTaskQueue; | 69 typedef OverflowTaskQueue<ObjArrayTask, mtGC, QUEUE_SIZE> ObjArrayTaskQueue; |
70 typedef GenericTaskQueueSet<ObjArrayTaskQueue> ObjArrayTaskQueueSet; | 70 typedef GenericTaskQueueSet<ObjArrayTaskQueue, mtGC> ObjArrayTaskQueueSet; |
71 #undef QUEUE_SIZE | 71 #undef QUEUE_SIZE |
72 | 72 |
73 static ParCompactionManager** _manager_array; | 73 static ParCompactionManager** _manager_array; |
74 static OopTaskQueueSet* _stack_array; | 74 static OopTaskQueueSet* _stack_array; |
75 static ObjArrayTaskQueueSet* _objarray_queues; | 75 static ObjArrayTaskQueueSet* _objarray_queues; |
76 static ObjectStartArray* _start_array; | 76 static ObjectStartArray* _start_array; |
77 static RegionTaskQueueSet* _region_array; | 77 static RegionTaskQueueSet* _region_array; |
78 static PSOldGen* _old_gen; | 78 static PSOldGen* _old_gen; |
79 | 79 |
80 private: | 80 private: |
81 OverflowTaskQueue<oop> _marking_stack; | 81 OverflowTaskQueue<oop, mtGC> _marking_stack; |
82 ObjArrayTaskQueue _objarray_stack; | 82 ObjArrayTaskQueue _objarray_stack; |
83 | 83 |
84 // Is there a way to reuse the _marking_stack for the | 84 // Is there a way to reuse the _marking_stack for the |
85 // saving empty regions? For now just create a different | 85 // saving empty regions? For now just create a different |
86 // type of TaskQueue. | 86 // type of TaskQueue. |
108 static int _recycled_top; | 108 static int _recycled_top; |
109 // The index into _recycled_stack_index of the last region stack index | 109 // The index into _recycled_stack_index of the last region stack index |
110 // popped. If -1, there has not been any entry popped. | 110 // popped. If -1, there has not been any entry popped. |
111 static int _recycled_bottom; | 111 static int _recycled_bottom; |
112 | 112 |
113 Stack<Klass*> _revisit_klass_stack; | 113 Stack<Klass*, mtGC> _revisit_klass_stack; |
114 Stack<DataLayout*> _revisit_mdo_stack; | 114 Stack<DataLayout*, mtGC> _revisit_mdo_stack; |
115 | 115 |
116 static ParMarkBitMap* _mark_bitmap; | 116 static ParMarkBitMap* _mark_bitmap; |
117 | 117 |
118 Action _action; | 118 Action _action; |
119 | 119 |
124 static void initialize(ParMarkBitMap* mbm); | 124 static void initialize(ParMarkBitMap* mbm); |
125 | 125 |
126 protected: | 126 protected: |
127 // Array of tasks. Needed by the ParallelTaskTerminator. | 127 // Array of tasks. Needed by the ParallelTaskTerminator. |
128 static RegionTaskQueueSet* region_array() { return _region_array; } | 128 static RegionTaskQueueSet* region_array() { return _region_array; } |
129 OverflowTaskQueue<oop>* marking_stack() { return &_marking_stack; } | 129 OverflowTaskQueue<oop, mtGC>* marking_stack() { return &_marking_stack; } |
130 | 130 |
131 // Pushes onto the marking stack. If the marking stack is full, | 131 // Pushes onto the marking stack. If the marking stack is full, |
132 // pushes onto the overflow stack. | 132 // pushes onto the overflow stack. |
133 void stack_push(oop obj); | 133 void stack_push(oop obj); |
134 // Do not implement an equivalent stack_pop. Deal with the | 134 // Do not implement an equivalent stack_pop. Deal with the |
173 // void drain_stacks(); | 173 // void drain_stacks(); |
174 | 174 |
175 bool should_update(); | 175 bool should_update(); |
176 bool should_copy(); | 176 bool should_copy(); |
177 | 177 |
178 Stack<Klass*>* revisit_klass_stack() { return &_revisit_klass_stack; } | 178 Stack<Klass*, mtGC>* revisit_klass_stack() { return &_revisit_klass_stack; } |
179 Stack<DataLayout*>* revisit_mdo_stack() { return &_revisit_mdo_stack; } | 179 Stack<DataLayout*, mtGC>* revisit_mdo_stack() { return &_revisit_mdo_stack; } |
180 | 180 |
181 // Save for later processing. Must not fail. | 181 // Save for later processing. Must not fail. |
182 inline void push(oop obj) { _marking_stack.push(obj); } | 182 inline void push(oop obj) { _marking_stack.push(obj); } |
183 inline void push_objarray(oop objarray, size_t index); | 183 inline void push_objarray(oop objarray, size_t index); |
184 inline void push_region(size_t index); | 184 inline void push_region(size_t index); |