comparison src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.cpp @ 535:4e400c36026f

6783381: NUMA allocator: don't pretouch eden space with UseNUMA Summary: Moved pretouching to MutableSpace. Also MutableSpace now turns on page interleaving for the region it covers. Reviewed-by: jmasa, jcoomes
author iveresov
date Tue, 27 Jan 2009 18:13:59 -0800
parents 9ee9cf798b59
children 0fbdb4381b99
comparison
equal deleted inserted replaced
534:5cfd8d19e546 535:4e400c36026f
76 _reserved_low_addr = _reserved_high_addr = NULL; 76 _reserved_low_addr = _reserved_high_addr = NULL;
77 _committed_low_addr = _committed_high_addr = NULL; 77 _committed_low_addr = _committed_high_addr = NULL;
78 _special = false; 78 _special = false;
79 } 79 }
80 80
81 bool PSVirtualSpace::expand_by(size_t bytes, bool pre_touch) { 81 bool PSVirtualSpace::expand_by(size_t bytes) {
82 assert(is_aligned(bytes), "arg not aligned"); 82 assert(is_aligned(bytes), "arg not aligned");
83 DEBUG_ONLY(PSVirtualSpaceVerifier this_verifier(this)); 83 DEBUG_ONLY(PSVirtualSpaceVerifier this_verifier(this));
84 84
85 if (uncommitted_size() < bytes) { 85 if (uncommitted_size() < bytes) {
86 return false; 86 return false;
88 88
89 char* const base_addr = committed_high_addr(); 89 char* const base_addr = committed_high_addr();
90 bool result = special() || os::commit_memory(base_addr, bytes, alignment()); 90 bool result = special() || os::commit_memory(base_addr, bytes, alignment());
91 if (result) { 91 if (result) {
92 _committed_high_addr += bytes; 92 _committed_high_addr += bytes;
93 }
94
95 if (pre_touch || AlwaysPreTouch) {
96 for (char* curr = base_addr;
97 curr < _committed_high_addr;
98 curr += os::vm_page_size()) {
99 char tmp = *curr;
100 *curr = 0;
101 }
102 } 93 }
103 94
104 return result; 95 return result;
105 } 96 }
106 97
253 set_reserved(rs); 244 set_reserved(rs);
254 set_committed(reserved_high_addr(), reserved_high_addr()); 245 set_committed(reserved_high_addr(), reserved_high_addr());
255 DEBUG_ONLY(verify()); 246 DEBUG_ONLY(verify());
256 } 247 }
257 248
258 bool PSVirtualSpaceHighToLow::expand_by(size_t bytes, bool pre_touch) { 249 bool PSVirtualSpaceHighToLow::expand_by(size_t bytes) {
259 assert(is_aligned(bytes), "arg not aligned"); 250 assert(is_aligned(bytes), "arg not aligned");
260 DEBUG_ONLY(PSVirtualSpaceVerifier this_verifier(this)); 251 DEBUG_ONLY(PSVirtualSpaceVerifier this_verifier(this));
261 252
262 if (uncommitted_size() < bytes) { 253 if (uncommitted_size() < bytes) {
263 return false; 254 return false;
265 256
266 char* const base_addr = committed_low_addr() - bytes; 257 char* const base_addr = committed_low_addr() - bytes;
267 bool result = special() || os::commit_memory(base_addr, bytes, alignment()); 258 bool result = special() || os::commit_memory(base_addr, bytes, alignment());
268 if (result) { 259 if (result) {
269 _committed_low_addr -= bytes; 260 _committed_low_addr -= bytes;
270 }
271
272 if (pre_touch || AlwaysPreTouch) {
273 for (char* curr = base_addr;
274 curr < _committed_high_addr;
275 curr += os::vm_page_size()) {
276 char tmp = *curr;
277 *curr = 0;
278 }
279 } 261 }
280 262
281 return result; 263 return result;
282 } 264 }
283 265