--- old/src/hotspot/share/gc/z/zPage.hpp 2019-05-02 09:57:48.066001333 +0200 +++ new/src/hotspot/share/gc/z/zPage.hpp 2019-05-02 09:57:47.820993242 +0200 @@ -35,26 +35,27 @@ friend class ZList; private: - // Always hot - const uint8_t _type; // Page type - uint8_t _numa_id; // NUMA node affinity - uint32_t _seqnum; // Allocation sequence number - const ZVirtualMemory _virtual; // Virtual start/end address - volatile uintptr_t _top; // Virtual top address - ZLiveMap _livemap; // Live map - - // Hot when relocated and cached - ZPhysicalMemory _physical; // Physical memory for page - ZListNode _node; // Page list node + uint8_t _type; + uint8_t _numa_id; + uint32_t _seqnum; + ZVirtualMemory _virtual; + volatile uintptr_t _top; + ZLiveMap _livemap; + uint64_t _last_used; + ZPhysicalMemory _physical; + ZListNode _node; + void assert_initialized() const; + + uint8_t type_from_size(size_t size) const; const char* type_to_string() const; bool is_object_marked(uintptr_t addr) const; bool is_object_strongly_marked(uintptr_t addr) const; public: - ZPage(uint8_t type, ZVirtualMemory vmem, ZPhysicalMemory pmem); - ~ZPage(); + ZPage(const ZVirtualMemory& vmem, const ZPhysicalMemory& pmem); + ZPage(uint8_t type, const ZVirtualMemory& vmem, const ZPhysicalMemory& pmem); uint32_t object_max_count() const; size_t object_alignment_shift() const; @@ -69,11 +70,18 @@ uint8_t numa_id(); - ZPhysicalMemory& physical_memory(); + uint64_t last_used() const; + void set_last_used(); + + const ZPhysicalMemory& physical_memory() const; const ZVirtualMemory& virtual_memory() const; void reset(); + ZPage* retype(uint8_t type); + ZPage* split(size_t size); + ZPage* split(uint8_t type, size_t size); + bool is_in(uintptr_t addr) const; uintptr_t block_start(uintptr_t addr) const;