void FileMapInfo::write_region(int region, char* base, size_t size, size_t capacity, bool read_only, bool allow_exec) { struct FileMapInfo::FileMapHeader::space_info* si = &_header->_space[region]; if (_file_open) { guarantee(si->_file_offset == _file_offset, "file offset mismatch."); if (PrintSharedSpaces) { tty->print_cr("Shared file region %d: 0x%6x bytes, addr " INTPTR_FORMAT " file offset 0x%6x", region, size, base, _file_offset); } } else { si->_file_offset = _file_offset; } if (MetaspaceShared::is_string_region(region)) { assert((base - (char*)Universe::narrow_oop_base()) % HeapWordSize == 0, "Sanity"); if (base != NULL) { si->_addr._offset = (intx)oopDesc::encode_heap_oop_not_null((oop)base); } else { si->_addr._offset = 0; } } else { si->_addr._base = base; } si->_used = size; si->_capacity = capacity; si->_read_only = read_only; si->_allow_exec = allow_exec; si->_crc = ClassLoader::crc32(0, base, (jint)size); write_bytes_aligned(base, (int)size); }
void FileMapInfo::write_region(int region, char* base, size_t size, size_t capacity, bool read_only, bool allow_exec) { struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[region]; if (_file_open) { guarantee(si->_file_offset == _file_offset, "file offset mismatch."); if (PrintSharedSpaces) { tty->print_cr("Shared file region %d: 0x%x bytes, addr 0x%x," " file offset 0x%x", region, size, base, _file_offset); } } else { si->_file_offset = _file_offset; } si->_base = base; si->_used = size; si->_capacity = capacity; si->_read_only = read_only; si->_allow_exec = allow_exec; write_bytes_aligned(base, (int)size); }
/** * 将jar包共享内存的映射信息头部写入映射信息文件classes.jas */ void FileMapInfo::write_header() { write_bytes_aligned(&_header, sizeof(FileMapHeader)); }