< prev index next >

src/hotspot/share/cds/archiveHeapWriter.hpp

Print this page
*** 60,10 ***
--- 60,11 ---
    HeapRootSegments heap_root_segments() { return _heap_root_segments; }
  };
  
  #if INCLUDE_CDS_JAVA_HEAP
  class ArchiveHeapWriter : AllStatic {
+   friend class HeapShared;
    // ArchiveHeapWriter manipulates three types of addresses:
    //
    //     "source" vs "buffered" vs "requested"
    //
    // (Note: the design and convention is the same as for the archiving of Metaspace objects.

*** 150,11 ***
      int _index;    // The location of this object in _source_objs
      int _rank;     // A lower rank means the object will be written at a lower location.
    };
    static GrowableArrayCHeap<HeapObjOrder, mtClassShared>* _source_objs_order;
  
!   typedef ResizeableResourceHashtable<size_t, oop,
        AnyObj::C_HEAP,
        mtClassShared> BufferOffsetToSourceObjectTable;
    static BufferOffsetToSourceObjectTable* _buffer_offset_to_source_obj_table;
  
    static void allocate_buffer();
--- 151,11 ---
      int _index;    // The location of this object in _source_objs
      int _rank;     // A lower rank means the object will be written at a lower location.
    };
    static GrowableArrayCHeap<HeapObjOrder, mtClassShared>* _source_objs_order;
  
!   typedef ResizeableResourceHashtable<size_t, OopHandle,
        AnyObj::C_HEAP,
        mtClassShared> BufferOffsetToSourceObjectTable;
    static BufferOffsetToSourceObjectTable* _buffer_offset_to_source_obj_table;
  
    static void allocate_buffer();

*** 194,10 ***
--- 195,11 ---
    static void root_segment_at_put(objArrayOop segment, int index, oop root);
    static objArrayOop allocate_root_segment(size_t offset, int element_count);
    static void copy_roots_to_buffer(GrowableArrayCHeap<oop, mtClassShared>* roots);
    static void copy_source_objs_to_buffer(GrowableArrayCHeap<oop, mtClassShared>* roots);
    static size_t copy_one_source_obj_to_buffer(oop src_obj);
+   static void update_stats(oop src_obj);
  
    static void maybe_fill_gc_region_gap(size_t required_byte_size);
    static size_t filler_array_byte_size(int length);
    static int filler_array_length(size_t fill_bytes);
    static HeapWord* init_filler_array_at_buffer_top(int array_length, size_t fill_bytes);

*** 225,20 ***
    static int compare_objs_by_oop_fields(HeapObjOrder* a, HeapObjOrder* b);
    static void sort_source_objs();
  
  public:
    static void init() NOT_CDS_JAVA_HEAP_RETURN;
    static void add_source_obj(oop src_obj);
    static bool is_too_large_to_archive(size_t size);
    static bool is_too_large_to_archive(oop obj);
    static bool is_string_too_large_to_archive(oop string);
    static void write(GrowableArrayCHeap<oop, mtClassShared>*, ArchiveHeapInfo* heap_info);
    static address requested_address();  // requested address of the lowest achived heap object
    static size_t get_filler_size_at(address buffered_addr);
  
    static void mark_native_pointer(oop src_obj, int offset);
!   static bool is_marked_as_native_pointer(ArchiveHeapInfo* heap_info, oop src_obj, int field_offset);
    static oop source_obj_to_requested_obj(oop src_obj);
    static oop buffered_addr_to_source_obj(address buffered_addr);
    static address buffered_addr_to_requested_addr(address buffered_addr);
  
  };
--- 227,21 ---
    static int compare_objs_by_oop_fields(HeapObjOrder* a, HeapObjOrder* b);
    static void sort_source_objs();
  
  public:
    static void init() NOT_CDS_JAVA_HEAP_RETURN;
+   static void delete_tables_with_raw_oops();
    static void add_source_obj(oop src_obj);
    static bool is_too_large_to_archive(size_t size);
    static bool is_too_large_to_archive(oop obj);
    static bool is_string_too_large_to_archive(oop string);
    static void write(GrowableArrayCHeap<oop, mtClassShared>*, ArchiveHeapInfo* heap_info);
    static address requested_address();  // requested address of the lowest achived heap object
    static size_t get_filler_size_at(address buffered_addr);
  
    static void mark_native_pointer(oop src_obj, int offset);
!   static bool is_marked_as_native_pointer(ArchiveHeapInfo* heap_info, address buffered_obj, int field_offset);
    static oop source_obj_to_requested_obj(oop src_obj);
    static oop buffered_addr_to_source_obj(address buffered_addr);
    static address buffered_addr_to_requested_addr(address buffered_addr);
  
  };
< prev index next >