comparison src/share/vm/memory/allocation.cpp @ 6882:716c64bda5ba

7199092: NMT: NMT needs to deal overlapped virtual memory ranges Summary: Enhanced virtual memory tracking to track committed regions as well as reserved regions, so NMT now can generate virtual memory map. Reviewed-by: acorn, coleenp
author zgu
date Fri, 19 Oct 2012 21:40:07 -0400
parents 7b5885dadbdc
children 59c790074993
comparison
equal deleted inserted replaced
6879:8ebcedb7604d 6882:716c64bda5ba
431 _max = _chunk->top(); 431 _max = _chunk->top();
432 set_size_in_bytes(Chunk::init_size); 432 set_size_in_bytes(Chunk::init_size);
433 NOT_PRODUCT(Atomic::inc(&_instance_count);) 433 NOT_PRODUCT(Atomic::inc(&_instance_count);)
434 } 434 }
435 435
436 Arena::Arena(Arena *a) : _chunk(a->_chunk), _hwm(a->_hwm), _max(a->_max), _first(a->_first) {
437 set_size_in_bytes(a->size_in_bytes());
438 NOT_PRODUCT(Atomic::inc(&_instance_count);)
439 }
440
441
442 Arena *Arena::move_contents(Arena *copy) { 436 Arena *Arena::move_contents(Arena *copy) {
443 copy->destruct_contents(); 437 copy->destruct_contents();
444 copy->_chunk = _chunk; 438 copy->_chunk = _chunk;
445 copy->_hwm = _hwm; 439 copy->_hwm = _hwm;
446 copy->_max = _max; 440 copy->_max = _max;
447 copy->_first = _first; 441 copy->_first = _first;
448 copy->set_size_in_bytes(size_in_bytes()); 442
443 // workaround rare racing condition, which could double count
444 // the arena size by native memory tracking
445 size_t size = size_in_bytes();
446 set_size_in_bytes(0);
447 copy->set_size_in_bytes(size);
449 // Destroy original arena 448 // Destroy original arena
450 reset(); 449 reset();
451 return copy; // Return Arena with contents 450 return copy; // Return Arena with contents
452 } 451 }
453 452
495 void Arena::destruct_contents() { 494 void Arena::destruct_contents() {
496 if (UseMallocOnly && _first != NULL) { 495 if (UseMallocOnly && _first != NULL) {
497 char* end = _first->next() ? _first->top() : _hwm; 496 char* end = _first->next() ? _first->top() : _hwm;
498 free_malloced_objects(_first, _first->bottom(), end, _hwm); 497 free_malloced_objects(_first, _first->bottom(), end, _hwm);
499 } 498 }
499 // reset size before chop to avoid a rare racing condition
500 // that can have total arena memory exceed total chunk memory
501 set_size_in_bytes(0);
500 _first->chop(); 502 _first->chop();
501 reset(); 503 reset();
502 } 504 }
503 505
504 // This is high traffic method, but many calls actually don't 506 // This is high traffic method, but many calls actually don't