Mercurial > hg > truffle
comparison src/share/vm/utilities/growableArray.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 | ee138854b3a6 |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6174:74533f63b116 | 6197:d2a62e0f25eb |
---|---|
84 int _max; // maximum length | 84 int _max; // maximum length |
85 Arena* _arena; // Indicates where allocation occurs: | 85 Arena* _arena; // Indicates where allocation occurs: |
86 // 0 means default ResourceArea | 86 // 0 means default ResourceArea |
87 // 1 means on C heap | 87 // 1 means on C heap |
88 // otherwise, allocate in _arena | 88 // otherwise, allocate in _arena |
89 | |
90 MEMFLAGS _memflags; // memory type if allocation in C heap | |
91 | |
89 #ifdef ASSERT | 92 #ifdef ASSERT |
90 int _nesting; // resource area nesting at creation | 93 int _nesting; // resource area nesting at creation |
91 void set_nesting(); | 94 void set_nesting(); |
92 void check_nesting(); | 95 void check_nesting(); |
93 #else | 96 #else |
100 bool on_stack () { return _arena == NULL; } | 103 bool on_stack () { return _arena == NULL; } |
101 bool on_arena () { return _arena > (Arena*)1; } | 104 bool on_arena () { return _arena > (Arena*)1; } |
102 | 105 |
103 // This GA will use the resource stack for storage if c_heap==false, | 106 // This GA will use the resource stack for storage if c_heap==false, |
104 // Else it will use the C heap. Use clear_and_deallocate to avoid leaks. | 107 // Else it will use the C heap. Use clear_and_deallocate to avoid leaks. |
105 GenericGrowableArray(int initial_size, int initial_len, bool c_heap) { | 108 GenericGrowableArray(int initial_size, int initial_len, bool c_heap, MEMFLAGS flags = mtNone) { |
106 _len = initial_len; | 109 _len = initial_len; |
107 _max = initial_size; | 110 _max = initial_size; |
111 _memflags = flags; | |
112 | |
113 // memory type has to be specified for C heap allocation | |
114 assert(!(c_heap && flags == mtNone), "memory type not specified for C heap object"); | |
115 | |
108 assert(_len >= 0 && _len <= _max, "initial_len too big"); | 116 assert(_len >= 0 && _len <= _max, "initial_len too big"); |
109 _arena = (c_heap ? (Arena*)1 : NULL); | 117 _arena = (c_heap ? (Arena*)1 : NULL); |
110 set_nesting(); | 118 set_nesting(); |
111 assert(!on_C_heap() || allocated_on_C_heap(), "growable array must be on C heap if elements are"); | 119 assert(!on_C_heap() || allocated_on_C_heap(), "growable array must be on C heap if elements are"); |
112 assert(!on_stack() || | 120 assert(!on_stack() || |
119 GenericGrowableArray(Arena* arena, int initial_size, int initial_len) { | 127 GenericGrowableArray(Arena* arena, int initial_size, int initial_len) { |
120 _len = initial_len; | 128 _len = initial_len; |
121 _max = initial_size; | 129 _max = initial_size; |
122 assert(_len >= 0 && _len <= _max, "initial_len too big"); | 130 assert(_len >= 0 && _len <= _max, "initial_len too big"); |
123 _arena = arena; | 131 _arena = arena; |
132 _memflags = mtNone; | |
133 | |
124 assert(on_arena(), "arena has taken on reserved value 0 or 1"); | 134 assert(on_arena(), "arena has taken on reserved value 0 or 1"); |
125 // Relax next assert to allow object allocation on resource area, | 135 // Relax next assert to allow object allocation on resource area, |
126 // on stack or embedded into an other object. | 136 // on stack or embedded into an other object. |
127 assert(allocated_on_arena() || allocated_on_stack(), | 137 assert(allocated_on_arena() || allocated_on_stack(), |
128 "growable array must be on arena or on stack if elements are on arena"); | 138 "growable array must be on arena or on stack if elements are on arena"); |
150 GrowableArray(Thread* thread, int initial_size) : GenericGrowableArray(initial_size, 0, false) { | 160 GrowableArray(Thread* thread, int initial_size) : GenericGrowableArray(initial_size, 0, false) { |
151 _data = (E*)raw_allocate(thread, sizeof(E)); | 161 _data = (E*)raw_allocate(thread, sizeof(E)); |
152 for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); | 162 for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); |
153 } | 163 } |
154 | 164 |
155 GrowableArray(int initial_size, bool C_heap = false) : GenericGrowableArray(initial_size, 0, C_heap) { | 165 GrowableArray(int initial_size, bool C_heap = false, MEMFLAGS F = mtInternal) |
166 : GenericGrowableArray(initial_size, 0, C_heap, F) { | |
156 _data = (E*)raw_allocate(sizeof(E)); | 167 _data = (E*)raw_allocate(sizeof(E)); |
157 for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); | 168 for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); |
158 } | 169 } |
159 | 170 |
160 GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false) : GenericGrowableArray(initial_size, initial_len, C_heap) { | 171 GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false, MEMFLAGS memflags = mtInternal) |
172 : GenericGrowableArray(initial_size, initial_len, C_heap, memflags) { | |
161 _data = (E*)raw_allocate(sizeof(E)); | 173 _data = (E*)raw_allocate(sizeof(E)); |
162 int i = 0; | 174 int i = 0; |
163 for (; i < _len; i++) ::new ((void*)&_data[i]) E(filler); | 175 for (; i < _len; i++) ::new ((void*)&_data[i]) E(filler); |
164 for (; i < _max; i++) ::new ((void*)&_data[i]) E(); | 176 for (; i < _max; i++) ::new ((void*)&_data[i]) E(); |
165 } | 177 } |