[11u] RFR: backport of JDK-8208658: Make CDS archived heap regions usable even if compressed oop encoding has changed
Jiangli Zhou
jianglizhou at google.com
Wed Jan 22 01:04:52 UTC 2020
I'd like to request a backport of JDK-8208658 to JDK 11u. It was an
enhancement that improves CDS usability and would improve startup time
if there's an existing default CDS archive (currently does not exist
in OpenJDK 11).
webrev: http://cr.openjdk.java.net/~jiangli/8208658-backport/webrev.00
The backport applied to jdk11u-dev mostly clean. The following small
set of changes were hand merged to filemap.cpp without additional
modifications. The backport was tested with all existing cds and
appcds tests, and tier 1 tests.
--- filemap.cpp
+++ filemap.cpp
@@ -967,7 +1069,9 @@
if (base == NULL || base != addr) {
// dealloc the regions from java heap
dealloc_archive_heap_regions(regions, region_num);
- log_info(cds)("UseSharedSpaces: Unable to map at required
address in java heap.");
+ log_info(cds)("UseSharedSpaces: Unable to map at required
address in java heap. "
+ INTPTR_FORMAT ", size = " SIZE_FORMAT " bytes",
+ p2i(addr), regions[i].byte_size());
return false;
}
}
@@ -1216,34 +1348,25 @@
idx == MetaspaceShared::rw ||
idx == MetaspaceShared::mc ||
idx == MetaspaceShared::md, "invalid region index");
- char* base = _header->region_addr(idx);
+ char* base = region_addr(idx);
if (p >= base && p < base + space_at(idx)->_used) {
return true;
}
return false;
}
-void FileMapInfo::print_shared_spaces() {
- tty->print_cr("Shared Spaces:");
- for (int i = 0; i < MetaspaceShared::n_regions; i++) {
- CDSFileMapRegion* si = space_at(i);
- char *base = _header->region_addr(i);
- tty->print(" %s " INTPTR_FORMAT "-" INTPTR_FORMAT,
- shared_region_name[i],
- p2i(base), p2i(base + si->_used));
- }
-}
-
// Unmap mapped regions of shared space.
void FileMapInfo::stop_sharing_and_unmap(const char* msg) {
FileMapInfo *map_info = FileMapInfo::current_info();
if (map_info) {
map_info->fail_continue("%s", msg);
for (int i = 0; i < MetaspaceShared::num_non_heap_spaces; i++) {
- char *addr = map_info->_header->region_addr(i);
- if (addr != NULL && !MetaspaceShared::is_heap_region(i)) {
- map_info->unmap_region(i);
- map_info->space_at(i)->_addr._base = NULL;
+ if (!MetaspaceShared::is_heap_region(i)) {
+ char *addr = map_info->region_addr(i);
+ if (addr != NULL) {
+ map_info->unmap_region(i);
+ map_info->space_at(i)->_addr._base = NULL;
+ }
Best regards,
Jiangli
More information about the hotspot-runtime-dev
mailing list