51 _physical(pmem) { 52 assert_initialized(); 53 } 54 55 void ZPage::assert_initialized() const { 56 assert(!_virtual.is_null(), "Should not be null"); 57 assert(!_physical.is_null(), "Should not be null"); 58 assert((_type == ZPageTypeSmall && size() == ZPageSizeSmall) || 59 (_type == ZPageTypeMedium && size() == ZPageSizeMedium) || 60 (_type == ZPageTypeLarge && is_aligned(size(), ZGranuleSize)), 61 "Page type/size mismatch"); 62 } 63 64 void ZPage::reset() { 65 _seqnum = ZGlobalSeqNum; 66 _top = start(); 67 _livemap.reset(); 68 _last_used = 0; 69 } 70 71 ZPage* ZPage::retype(uint8_t type) { 72 assert(_type != type, "Invalid retype"); 73 _type = type; 74 _livemap.resize(object_max_count()); 75 return this; 76 } 77 78 ZPage* ZPage::split(size_t size) { 79 return split(type_from_size(size), size); 80 } 81 82 ZPage* ZPage::split(uint8_t type, size_t size) { 83 assert(_virtual.size() > size, "Invalid split"); 84 85 // Resize this page, keep _numa_id, _seqnum, and _last_used 86 const ZVirtualMemory vmem = _virtual.split(size); 87 const ZPhysicalMemory pmem = _physical.split(size); 88 _type = type_from_size(_virtual.size()); 89 _top = start(); 90 _livemap.resize(object_max_count()); | 51 _physical(pmem) { 52 assert_initialized(); 53 } 54 55 void ZPage::assert_initialized() const { 56 assert(!_virtual.is_null(), "Should not be null"); 57 assert(!_physical.is_null(), "Should not be null"); 58 assert((_type == ZPageTypeSmall && size() == ZPageSizeSmall) || 59 (_type == ZPageTypeMedium && size() == ZPageSizeMedium) || 60 (_type == ZPageTypeLarge && is_aligned(size(), ZGranuleSize)), 61 "Page type/size mismatch"); 62 } 63 64 void ZPage::reset() { 65 _seqnum = ZGlobalSeqNum; 66 _top = start(); 67 _livemap.reset(); 68 _last_used = 0; 69 } 70 71 void ZPage::clear() { 72 const uintptr_t addr = ZAddress::good(start()); 73 ZUtils::zero(addr, size()); 74 } 75 76 ZPage* ZPage::retype(uint8_t type) { 77 assert(_type != type, "Invalid retype"); 78 _type = type; 79 _livemap.resize(object_max_count()); 80 return this; 81 } 82 83 ZPage* ZPage::split(size_t size) { 84 return split(type_from_size(size), size); 85 } 86 87 ZPage* ZPage::split(uint8_t type, size_t size) { 88 assert(_virtual.size() > size, "Invalid split"); 89 90 // Resize this page, keep _numa_id, _seqnum, and _last_used 91 const ZVirtualMemory vmem = _virtual.split(size); 92 const ZPhysicalMemory pmem = _physical.split(size); 93 _type = type_from_size(_virtual.size()); 94 _top = start(); 95 _livemap.resize(object_max_count()); |