comparison src/share/vm/runtime/virtualspace.cpp @ 22976:5788dbd1f2d6

8066875: VirtualSpace does not use large pages Reviewed-by: stefank, tschatzl, anoll, thartmann
author ehelin
date Fri, 16 Jan 2015 10:29:12 +0100
parents c2ce24504334
children 33e421924c67
comparison
equal deleted inserted replaced
22975:cc5c3ef1f03a 22976:5788dbd1f2d6
51 ReservedSpace::ReservedSpace() : _base(NULL), _size(0), _noaccess_prefix(0), 51 ReservedSpace::ReservedSpace() : _base(NULL), _size(0), _noaccess_prefix(0),
52 _alignment(0), _special(false), _executable(false) { 52 _alignment(0), _special(false), _executable(false) {
53 } 53 }
54 54
55 ReservedSpace::ReservedSpace(size_t size) { 55 ReservedSpace::ReservedSpace(size_t size) {
56 size_t page_size = os::page_size_for_region(size, 1); 56 // Want to use large pages where possible and pad with small pages.
57 size_t page_size = os::page_size_for_region_unaligned(size, 1);
57 bool large_pages = page_size != (size_t)os::vm_page_size(); 58 bool large_pages = page_size != (size_t)os::vm_page_size();
58 // Don't force the alignment to be large page aligned, 59 // Don't force the alignment to be large page aligned,
59 // since that will waste memory. 60 // since that will waste memory.
60 size_t alignment = os::vm_allocation_granularity(); 61 size_t alignment = os::vm_allocation_granularity();
61 initialize(size, alignment, large_pages, NULL, 0, false); 62 initialize(size, alignment, large_pages, NULL, 0, false);
370 _executable = false; 371 _executable = false;
371 } 372 }
372 373
373 374
374 bool VirtualSpace::initialize(ReservedSpace rs, size_t committed_size) { 375 bool VirtualSpace::initialize(ReservedSpace rs, size_t committed_size) {
375 const size_t max_commit_granularity = os::page_size_for_region(rs.size(), 1); 376 const size_t max_commit_granularity = os::page_size_for_region_unaligned(rs.size(), 1);
376 return initialize_with_granularity(rs, committed_size, max_commit_granularity); 377 return initialize_with_granularity(rs, committed_size, max_commit_granularity);
377 } 378 }
378 379
379 bool VirtualSpace::initialize_with_granularity(ReservedSpace rs, size_t committed_size, size_t max_commit_granularity) { 380 bool VirtualSpace::initialize_with_granularity(ReservedSpace rs, size_t committed_size, size_t max_commit_granularity) {
380 if(!rs.is_reserved()) return false; // allocation failed. 381 if(!rs.is_reserved()) return false; // allocation failed.
993 case Reserve: 994 case Reserve:
994 return vs.initialize(rs, 0); 995 return vs.initialize(rs, 0);
995 case Disable: 996 case Disable:
996 return vs.initialize_with_granularity(rs, 0, os::vm_page_size()); 997 return vs.initialize_with_granularity(rs, 0, os::vm_page_size());
997 case Commit: 998 case Commit:
998 return vs.initialize_with_granularity(rs, 0, os::page_size_for_region(rs.size(), 1)); 999 return vs.initialize_with_granularity(rs, 0, os::page_size_for_region_unaligned(rs.size(), 1));
999 } 1000 }
1000 } 1001 }
1001 1002
1002 public: 1003 public:
1003 static void test_virtual_space_actual_committed_space(size_t reserve_size, size_t commit_size, 1004 static void test_virtual_space_actual_committed_space(size_t reserve_size, size_t commit_size,