src/hotspot/share/memory/heapShared.hpp
changeset 52062 8dbf1a13af49
parent 52047 7bc8b456e5ac
child 52402 72d4e10305b9
equal deleted inserted replaced
52061:070186461dbb 52062:8dbf1a13af49
   105 #endif // INCLUDE_CDS_JAVA_HEAP
   105 #endif // INCLUDE_CDS_JAVA_HEAP
   106 
   106 
   107 class HeapShared: AllStatic {
   107 class HeapShared: AllStatic {
   108   friend class VerifySharedOopClosure;
   108   friend class VerifySharedOopClosure;
   109  private:
   109  private:
       
   110 
   110 #if INCLUDE_CDS_JAVA_HEAP
   111 #if INCLUDE_CDS_JAVA_HEAP
       
   112   static bool _open_archive_heap_region_mapped;
       
   113   static bool _archive_heap_region_fixed;
       
   114 
       
   115   static bool oop_equals(oop const& p1, oop const& p2) {
       
   116     return oopDesc::equals(p1, p2);
       
   117   }
       
   118   static unsigned oop_hash(oop const& p);
       
   119 
       
   120   typedef ResourceHashtable<oop, oop,
       
   121       HeapShared::oop_hash,
       
   122       HeapShared::oop_equals,
       
   123       15889, // prime number
       
   124       ResourceObj::C_HEAP> ArchivedObjectCache;
       
   125   static ArchivedObjectCache* _archived_object_cache;
   111 
   126 
   112   static bool klass_equals(Klass* const& p1, Klass* const& p2) {
   127   static bool klass_equals(Klass* const& p1, Klass* const& p2) {
   113     return primitive_equals<Klass*>(p1, p2);
   128     return primitive_equals<Klass*>(p1, p2);
   114   }
   129   }
   115 
   130 
   162 
   177 
   163   // Used by decode_from_archive
   178   // Used by decode_from_archive
   164   static address _narrow_oop_base;
   179   static address _narrow_oop_base;
   165   static int     _narrow_oop_shift;
   180   static int     _narrow_oop_shift;
   166 
   181 
   167   static bool oop_equals(oop const& p1, oop const& p2) {
       
   168     return primitive_equals<oop>(p1, p2);
       
   169   }
       
   170 
       
   171   static unsigned oop_hash(oop const& p) {
       
   172     return primitive_hash<address>((address)p);
       
   173   }
       
   174 
       
   175   typedef ResourceHashtable<oop, bool,
   182   typedef ResourceHashtable<oop, bool,
   176       HeapShared::oop_hash,
   183       HeapShared::oop_hash,
   177       HeapShared::oop_equals,
   184       HeapShared::oop_equals,
   178       15889, // prime number
   185       15889, // prime number
   179       ResourceObj::C_HEAP> SeenObjectsTable;
   186       ResourceObj::C_HEAP> SeenObjectsTable;
   205   static void start_recording_subgraph(InstanceKlass *k, const char* klass_name);
   212   static void start_recording_subgraph(InstanceKlass *k, const char* klass_name);
   206   static void done_recording_subgraph(InstanceKlass *k, const char* klass_name);
   213   static void done_recording_subgraph(InstanceKlass *k, const char* klass_name);
   207 
   214 
   208   static bool has_been_seen_during_subgraph_recording(oop obj);
   215   static bool has_been_seen_during_subgraph_recording(oop obj);
   209   static void set_has_been_seen_during_subgraph_recording(oop obj);
   216   static void set_has_been_seen_during_subgraph_recording(oop obj);
       
   217 
       
   218  public:
       
   219   static void create_archived_object_cache() {
       
   220     _archived_object_cache =
       
   221       new (ResourceObj::C_HEAP, mtClass)ArchivedObjectCache();
       
   222   }
       
   223   static void destroy_archived_object_cache() {
       
   224     delete _archived_object_cache;
       
   225     _archived_object_cache = NULL;
       
   226   }
       
   227   static ArchivedObjectCache* archived_object_cache() {
       
   228     return _archived_object_cache;
       
   229   }
       
   230 
       
   231   static oop find_archived_heap_object(oop obj);
       
   232   static oop archive_heap_object(oop obj, Thread* THREAD);
       
   233   static oop materialize_archived_object(narrowOop v);
       
   234 
       
   235   static void archive_klass_objects(Thread* THREAD);
       
   236 
       
   237   static void set_archive_heap_region_fixed() {
       
   238     _archive_heap_region_fixed = true;
       
   239   }
       
   240   static bool archive_heap_region_fixed() {
       
   241     return _archive_heap_region_fixed;
       
   242   }
       
   243 
       
   244   static void archive_java_heap_objects(GrowableArray<MemRegion> *closed,
       
   245                                         GrowableArray<MemRegion> *open);
       
   246   static void copy_closed_archive_heap_objects(GrowableArray<MemRegion> * closed_archive);
       
   247   static void copy_open_archive_heap_objects(GrowableArray<MemRegion> * open_archive);
   210 #endif // INCLUDE_CDS_JAVA_HEAP
   248 #endif // INCLUDE_CDS_JAVA_HEAP
   211  public:
   249 
       
   250  public:
       
   251   static bool is_heap_object_archiving_allowed() {
       
   252     CDS_JAVA_HEAP_ONLY(return (UseG1GC && UseCompressedOops && UseCompressedClassPointers);)
       
   253     NOT_CDS_JAVA_HEAP(return false;)
       
   254   }
       
   255 
       
   256   static void set_open_archive_heap_region_mapped() {
       
   257     CDS_JAVA_HEAP_ONLY(_open_archive_heap_region_mapped = true);
       
   258     NOT_CDS_JAVA_HEAP_RETURN;
       
   259   }
       
   260   static bool open_archive_heap_region_mapped() {
       
   261     CDS_JAVA_HEAP_ONLY(return _open_archive_heap_region_mapped);
       
   262     NOT_CDS_JAVA_HEAP_RETURN_(false);
       
   263   }
       
   264 
       
   265   static void fixup_mapped_heap_regions() NOT_CDS_JAVA_HEAP_RETURN;
       
   266 
       
   267   inline static bool is_archived_object(oop p) NOT_CDS_JAVA_HEAP_RETURN_(false);
       
   268 
       
   269   static void archive_java_heap_objects() NOT_CDS_JAVA_HEAP_RETURN;
       
   270 
   212   static char* read_archived_subgraph_infos(char* buffer) NOT_CDS_JAVA_HEAP_RETURN_(buffer);
   271   static char* read_archived_subgraph_infos(char* buffer) NOT_CDS_JAVA_HEAP_RETURN_(buffer);
   213   static void write_archived_subgraph_infos() NOT_CDS_JAVA_HEAP_RETURN;
   272   static void write_archived_subgraph_infos() NOT_CDS_JAVA_HEAP_RETURN;
   214   static void initialize_from_archived_subgraph(Klass* k) NOT_CDS_JAVA_HEAP_RETURN;
   273   static void initialize_from_archived_subgraph(Klass* k) NOT_CDS_JAVA_HEAP_RETURN;
   215 
   274 
   216   // NarrowOops stored in the CDS archive may use a different encoding scheme
   275   // NarrowOops stored in the CDS archive may use a different encoding scheme
   223 
   282 
   224   static void patch_archived_heap_embedded_pointers(MemRegion mem, address  oopmap,
   283   static void patch_archived_heap_embedded_pointers(MemRegion mem, address  oopmap,
   225                                                     size_t oopmap_in_bits) NOT_CDS_JAVA_HEAP_RETURN;
   284                                                     size_t oopmap_in_bits) NOT_CDS_JAVA_HEAP_RETURN;
   226 
   285 
   227   static void init_archivable_static_fields(Thread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
   286   static void init_archivable_static_fields(Thread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
   228   static void archive_static_fields(Thread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
   287   static void archive_object_subgraphs(Thread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
   229   static void write_subgraph_info_table() NOT_CDS_JAVA_HEAP_RETURN;
   288   static void write_subgraph_info_table() NOT_CDS_JAVA_HEAP_RETURN;
   230   static void serialize_subgraph_info_table_header(SerializeClosure* soc) NOT_CDS_JAVA_HEAP_RETURN;
   289   static void serialize_subgraph_info_table_header(SerializeClosure* soc) NOT_CDS_JAVA_HEAP_RETURN;
   231 
   290 
   232 #if INCLUDE_CDS_JAVA_HEAP
   291 #if INCLUDE_CDS_JAVA_HEAP
   233   static ResourceBitMap calculate_oopmap(MemRegion region);
   292   static ResourceBitMap calculate_oopmap(MemRegion region);