src/share/vm/gc_implementation/shared/mutableSpace.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File linux-numa-bad-mmap Sdiff src/share/vm/gc_implementation/shared

src/share/vm/gc_implementation/shared/mutableSpace.cpp

Print this page




  34 MutableSpace::MutableSpace(size_t alignment): ImmutableSpace(), _top(NULL), _alignment(alignment) {
  35   assert(MutableSpace::alignment() >= 0 &&
  36          MutableSpace::alignment() % os::vm_page_size() == 0,
  37          "Space should be aligned");
  38   _mangler = new MutableSpaceMangler(this);
  39 }
  40 
  41 MutableSpace::~MutableSpace() {
  42   delete _mangler;
  43 }
  44 
  45 void MutableSpace::numa_setup_pages(MemRegion mr, bool clear_space) {
  46   if (!mr.is_empty()) {
  47     size_t page_size = UseLargePages ? alignment() : os::vm_page_size();
  48     HeapWord *start = (HeapWord*)round_to((intptr_t) mr.start(), page_size);
  49     HeapWord *end =  (HeapWord*)round_down((intptr_t) mr.end(), page_size);
  50     if (end > start) {
  51       size_t size = pointer_delta(end, start, sizeof(char));
  52       if (clear_space) {
  53         // Prefer page reallocation to migration.
  54         os::free_memory((char*)start, size);
  55       }
  56       os::numa_make_global((char*)start, size);
  57     }
  58   }
  59 }
  60 
  61 void MutableSpace::pretouch_pages(MemRegion mr) {
  62   for (volatile char *p = (char*)mr.start(); p < (char*)mr.end(); p += os::vm_page_size()) {
  63     char t = *p; *p = t;
  64   }
  65 }
  66 
  67 void MutableSpace::initialize(MemRegion mr,
  68                               bool clear_space,
  69                               bool mangle_space,
  70                               bool setup_pages) {
  71 
  72   assert(Universe::on_page_boundary(mr.start()) && Universe::on_page_boundary(mr.end()),
  73          "invalid space boundaries");
  74 




  34 MutableSpace::MutableSpace(size_t alignment): ImmutableSpace(), _top(NULL), _alignment(alignment) {
  35   assert(MutableSpace::alignment() >= 0 &&
  36          MutableSpace::alignment() % os::vm_page_size() == 0,
  37          "Space should be aligned");
  38   _mangler = new MutableSpaceMangler(this);
  39 }
  40 
  41 MutableSpace::~MutableSpace() {
  42   delete _mangler;
  43 }
  44 
  45 void MutableSpace::numa_setup_pages(MemRegion mr, bool clear_space) {
  46   if (!mr.is_empty()) {
  47     size_t page_size = UseLargePages ? alignment() : os::vm_page_size();
  48     HeapWord *start = (HeapWord*)round_to((intptr_t) mr.start(), page_size);
  49     HeapWord *end =  (HeapWord*)round_down((intptr_t) mr.end(), page_size);
  50     if (end > start) {
  51       size_t size = pointer_delta(end, start, sizeof(char));
  52       if (clear_space) {
  53         // Prefer page reallocation to migration.
  54         os::free_memory((char*)start, size, page_size);
  55       }
  56       os::numa_make_global((char*)start, size);
  57     }
  58   }
  59 }
  60 
  61 void MutableSpace::pretouch_pages(MemRegion mr) {
  62   for (volatile char *p = (char*)mr.start(); p < (char*)mr.end(); p += os::vm_page_size()) {
  63     char t = *p; *p = t;
  64   }
  65 }
  66 
  67 void MutableSpace::initialize(MemRegion mr,
  68                               bool clear_space,
  69                               bool mangle_space,
  70                               bool setup_pages) {
  71 
  72   assert(Universe::on_page_boundary(mr.start()) && Universe::on_page_boundary(mr.end()),
  73          "invalid space boundaries");
  74 


src/share/vm/gc_implementation/shared/mutableSpace.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File