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
|