FileMapHeader::_heap_obj_roots is an narrowOop that's used to remember the objArray that stores all the roots of archived heap objects. Reading/writing of this field requires some ad-hoc code in many places.
There's already a standard way of reading/writing oops in the CDS archive -- SerializeClosure::do_oop().
See here for an example:
https://github.com/iklam/jdk/blame/ad1dc9c2ae5463363aff20072a3f2ca4ea23acd2/src/hotspot/share/memory/universe.cpp#L243
We should use the same pattern in HeapShared.seralize() to write/restore HeapShared::_roots. That way we can remove FileMapHeader::_heap_obj_roots and the associated ad-hoc code.
There's already a standard way of reading/writing oops in the CDS archive -- SerializeClosure::do_oop().
See here for an example:
https://github.com/iklam/jdk/blame/ad1dc9c2ae5463363aff20072a3f2ca4ea23acd2/src/hotspot/share/memory/universe.cpp#L243
We should use the same pattern in HeapShared.seralize() to write/restore HeapShared::_roots. That way we can remove FileMapHeader::_heap_obj_roots and the associated ad-hoc code.