8253081: G1 fails on stale objects in archived module graph in Open Archive regions

Change the handling of Open Archive areas, instead of assuming that everything in there is live always, a root containing references to all live root objects is provided. Adapt G1 to handle Open Archive regions as any other old region apart from never compacting or evacuating them.

Co-authored-by: Ioi Lam <iklam@openjdk.org>
Reviewed-by: kbarrett, sjohanss, redestad
This commit is contained in:
Thomas Schatzl 2020-11-18 08:21:03 +00:00
parent c08921487b
commit d30956055b
32 changed files with 584 additions and 230 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -417,7 +417,7 @@ class ConstantPoolCache: public MetaspaceObj {
Array<u2>* _reference_map;
// The narrowOop pointer to the archived resolved_references. Set at CDS dump
// time when caching java heap object is supported.
CDS_JAVA_HEAP_ONLY(narrowOop _archived_references;)
CDS_JAVA_HEAP_ONLY(int _archived_references_index;)
// Sizing
debug_only(friend class ClassVerifier;)
@ -444,6 +444,7 @@ class ConstantPoolCache: public MetaspaceObj {
oop archived_references() NOT_CDS_JAVA_HEAP_RETURN_(NULL);
void set_archived_references(oop o) NOT_CDS_JAVA_HEAP_RETURN;
void clear_archived_references() NOT_CDS_JAVA_HEAP_RETURN;
inline oop resolved_references();
void set_resolved_references(OopHandle s) { _resolved_references = s; }