src/hotspot/share/memory/dynamicArchive.cpp
changeset 58277 00a98f0aa1b3
parent 58096 0d97bf7cf8a4
child 58278 e47b459b315c
equal deleted inserted replaced
58276:1e57d3774190 58277:00a98f0aa1b3
   469   void make_klasses_shareable();
   469   void make_klasses_shareable();
   470   void sort_methods(InstanceKlass* ik) const;
   470   void sort_methods(InstanceKlass* ik) const;
   471   void set_symbols_permanent();
   471   void set_symbols_permanent();
   472   void relocate_buffer_to_target();
   472   void relocate_buffer_to_target();
   473   void write_archive(char* read_only_tables_start);
   473   void write_archive(char* read_only_tables_start);
       
   474   void write_regions(FileMapInfo* dynamic_info);
   474 
   475 
   475   void init_first_dump_space(address reserved_bottom) {
   476   void init_first_dump_space(address reserved_bottom) {
   476     address first_space_base = reserved_bottom;
   477     address first_space_base = reserved_bottom;
   477     DumpRegion* rw_space = MetaspaceShared::read_write_dump_space();
   478     DumpRegion* rw_space = MetaspaceShared::read_write_dump_space();
   478     MetaspaceShared::init_shared_dump_space(rw_space, first_space_base);
   479     MetaspaceShared::init_shared_dump_space(rw_space, first_space_base);
   909   Array<u8>* table = _header->shared_path_table().table();
   910   Array<u8>* table = _header->shared_path_table().table();
   910   table = to_target(table);
   911   table = to_target(table);
   911  _header->relocate_shared_path_table(table);
   912  _header->relocate_shared_path_table(table);
   912 }
   913 }
   913 
   914 
   914 static void write_archive_info(FileMapInfo* dynamic_info, DynamicArchiveHeader *header) {
   915 void DynamicArchiveBuilder::write_regions(FileMapInfo* dynamic_info) {
   915   dynamic_info->write_header();
       
   916   dynamic_info->align_file_position();
       
   917   dynamic_info->write_region(MetaspaceShared::rw,
   916   dynamic_info->write_region(MetaspaceShared::rw,
   918                              MetaspaceShared::read_write_dump_space()->base(),
   917                              MetaspaceShared::read_write_dump_space()->base(),
   919                              MetaspaceShared::read_write_dump_space()->used(),
   918                              MetaspaceShared::read_write_dump_space()->used(),
   920                              /*read_only=*/false,/*allow_exec=*/false);
   919                              /*read_only=*/false,/*allow_exec=*/false);
   921   dynamic_info->write_region(MetaspaceShared::ro,
   920   dynamic_info->write_region(MetaspaceShared::ro,
   935   _header->set_read_only_tables_start(to_target(read_only_tables_start));
   934   _header->set_read_only_tables_start(to_target(read_only_tables_start));
   936 
   935 
   937   FileMapInfo* dynamic_info = FileMapInfo::dynamic_info();
   936   FileMapInfo* dynamic_info = FileMapInfo::dynamic_info();
   938   assert(dynamic_info != NULL, "Sanity");
   937   assert(dynamic_info != NULL, "Sanity");
   939 
   938 
   940   // Populate the file offsets, region crcs, etc. No data is written out.
       
   941   write_archive_info(dynamic_info, _header);
       
   942 
       
   943   // the header will no longer change. Compute its crc.
       
   944   dynamic_info->set_header_crc(dynamic_info->compute_header_crc());
       
   945 
       
   946   // Now write the archived data including the file offsets.
   939   // Now write the archived data including the file offsets.
   947   const char* archive_name = Arguments::GetSharedDynamicArchivePath();
   940   const char* archive_name = Arguments::GetSharedDynamicArchivePath();
   948   dynamic_info->open_for_write(archive_name);
   941   dynamic_info->open_for_write(archive_name);
   949   write_archive_info(dynamic_info, _header);
   942   write_regions(dynamic_info);
       
   943   dynamic_info->set_header_crc(dynamic_info->compute_header_crc());
       
   944   dynamic_info->write_header();
   950   dynamic_info->close();
   945   dynamic_info->close();
   951 
       
   952 
   946 
   953   address base = to_target(_alloc_bottom);
   947   address base = to_target(_alloc_bottom);
   954   address top  = address(current_dump_space()->top()) + _buffer_to_target_delta;
   948   address top  = address(current_dump_space()->top()) + _buffer_to_target_delta;
   955   size_t file_size = pointer_delta(top, base, sizeof(char));
   949   size_t file_size = pointer_delta(top, base, sizeof(char));
   956 
   950