< prev index next >

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

Print this page
rev 7555 : imported patch 8067469-g1-ignores-alwayspretouch


  46   delete _mangler;
  47 }
  48 
  49 void MutableSpace::numa_setup_pages(MemRegion mr, bool clear_space) {
  50   if (!mr.is_empty()) {
  51     size_t page_size = UseLargePages ? alignment() : os::vm_page_size();
  52     HeapWord *start = (HeapWord*)round_to((intptr_t) mr.start(), page_size);
  53     HeapWord *end =  (HeapWord*)round_down((intptr_t) mr.end(), page_size);
  54     if (end > start) {
  55       size_t size = pointer_delta(end, start, sizeof(char));
  56       if (clear_space) {
  57         // Prefer page reallocation to migration.
  58         os::free_memory((char*)start, size, page_size);
  59       }
  60       os::numa_make_global((char*)start, size);
  61     }
  62   }
  63 }
  64 
  65 void MutableSpace::pretouch_pages(MemRegion mr) {
  66   for (volatile char *p = (char*)mr.start(); p < (char*)mr.end(); p += os::vm_page_size()) {
  67     char t = *p; *p = t;
  68   }
  69 }
  70 
  71 void MutableSpace::initialize(MemRegion mr,
  72                               bool clear_space,
  73                               bool mangle_space,
  74                               bool setup_pages) {
  75 
  76   assert(Universe::on_page_boundary(mr.start()) && Universe::on_page_boundary(mr.end()),
  77          "invalid space boundaries");
  78 
  79   if (setup_pages && (UseNUMA || AlwaysPreTouch)) {
  80     // The space may move left and right or expand/shrink.
  81     // We'd like to enforce the desired page placement.
  82     MemRegion head, tail;
  83     if (last_setup_region().is_empty()) {
  84       // If it's the first initialization don't limit the amount of work.
  85       head = mr;
  86       tail = MemRegion(mr.end(), mr.end());
  87     } else {
  88       // Is there an intersection with the address space?




  46   delete _mangler;
  47 }
  48 
  49 void MutableSpace::numa_setup_pages(MemRegion mr, bool clear_space) {
  50   if (!mr.is_empty()) {
  51     size_t page_size = UseLargePages ? alignment() : os::vm_page_size();
  52     HeapWord *start = (HeapWord*)round_to((intptr_t) mr.start(), page_size);
  53     HeapWord *end =  (HeapWord*)round_down((intptr_t) mr.end(), page_size);
  54     if (end > start) {
  55       size_t size = pointer_delta(end, start, sizeof(char));
  56       if (clear_space) {
  57         // Prefer page reallocation to migration.
  58         os::free_memory((char*)start, size, page_size);
  59       }
  60       os::numa_make_global((char*)start, size);
  61     }
  62   }
  63 }
  64 
  65 void MutableSpace::pretouch_pages(MemRegion mr) {
  66   os::pretouch_memory((char*)mr.start(), (char*)mr.end());


  67 }
  68 
  69 void MutableSpace::initialize(MemRegion mr,
  70                               bool clear_space,
  71                               bool mangle_space,
  72                               bool setup_pages) {
  73 
  74   assert(Universe::on_page_boundary(mr.start()) && Universe::on_page_boundary(mr.end()),
  75          "invalid space boundaries");
  76 
  77   if (setup_pages && (UseNUMA || AlwaysPreTouch)) {
  78     // The space may move left and right or expand/shrink.
  79     // We'd like to enforce the desired page placement.
  80     MemRegion head, tail;
  81     if (last_setup_region().is_empty()) {
  82       // If it's the first initialization don't limit the amount of work.
  83       head = mr;
  84       tail = MemRegion(mr.end(), mr.end());
  85     } else {
  86       // Is there an intersection with the address space?


< prev index next >