提交 220e1409 编写于 作者: Y ysr

6801625: CDS: HeapDump tests crash with internal error in compactingPermGenGen.cpp

Summary: Allow iteration over the shared spaces when using CDS, repealing previous proscription. Deferred further required CDS-related cleanups of perm gen to CR 6897789.
Reviewed-by: phh, jmasa
上级 e5eeb712
...@@ -352,15 +352,19 @@ void CompactingPermGenGen::post_compact() { ...@@ -352,15 +352,19 @@ void CompactingPermGenGen::post_compact() {
} }
// Do not use in time-critical operations due to the possibility of paging
// in otherwise untouched or previously unread portions of the perm gen,
// for instance, the shared spaces. NOTE: Because CompactingPermGenGen
// derives from OneContigSpaceCardGeneration which is supposed to have a
// single space, and does not override its object_iterate() method,
// object iteration via that interface does not look at the objects in
// the shared spaces when using CDS. This should be fixed; see CR 6897798.
void CompactingPermGenGen::space_iterate(SpaceClosure* blk, bool usedOnly) { void CompactingPermGenGen::space_iterate(SpaceClosure* blk, bool usedOnly) {
OneContigSpaceCardGeneration::space_iterate(blk, usedOnly); OneContigSpaceCardGeneration::space_iterate(blk, usedOnly);
if (spec()->enable_shared_spaces()) { if (spec()->enable_shared_spaces()) {
#ifdef PRODUCT
// Making the rw_space walkable will page in the entire space, and // Making the rw_space walkable will page in the entire space, and
// is to be avoided. However, this is required for Verify options. // is to be avoided in the case of time-critical operations.
ShouldNotReachHere(); // However, this is required for Verify and heap dump operations.
#endif
blk->do_space(ro_space()); blk->do_space(ro_space());
blk->do_space(rw_space()); blk->do_space(rw_space());
} }
......
...@@ -29,6 +29,9 @@ ...@@ -29,6 +29,9 @@
class PermanentGenerationSpec; class PermanentGenerationSpec;
// This is the "generation" view of a CompactingPermGen. // This is the "generation" view of a CompactingPermGen.
// NOTE: the shared spaces used for CDS are here handled in
// a somewhat awkward and potentially buggy fashion, see CR 6801625.
// This infelicity should be fixed, see CR 6897789.
class CompactingPermGenGen: public OneContigSpaceCardGeneration { class CompactingPermGenGen: public OneContigSpaceCardGeneration {
friend class VMStructs; friend class VMStructs;
// Abstractly, this is a subtype that gets access to protected fields. // Abstractly, this is a subtype that gets access to protected fields.
...@@ -47,7 +50,7 @@ private: ...@@ -47,7 +50,7 @@ private:
OffsetTableContigSpace* _ro_space; OffsetTableContigSpace* _ro_space;
OffsetTableContigSpace* _rw_space; OffsetTableContigSpace* _rw_space;
// With shared spaces there is a dicotomy in the use of the // With shared spaces there is a dichotomy in the use of the
// _virtual_space of the generation. There is a portion of the // _virtual_space of the generation. There is a portion of the
// _virtual_space that is used for the unshared part of the // _virtual_space that is used for the unshared part of the
// permanent generation and a portion that is reserved for the shared part. // permanent generation and a portion that is reserved for the shared part.
......
...@@ -606,6 +606,13 @@ void OneContigSpaceCardGeneration::shrink_by(size_t bytes) { ...@@ -606,6 +606,13 @@ void OneContigSpaceCardGeneration::shrink_by(size_t bytes) {
void OneContigSpaceCardGeneration::prepare_for_verify() {} void OneContigSpaceCardGeneration::prepare_for_verify() {}
// Override for a card-table generation with one contiguous
// space. NOTE: For reasons that are lost in the fog of history,
// this code is used when you iterate over perm gen objects,
// even when one uses CDS, where the perm gen has a couple of
// other spaces; this is because CompactingPermGenGen derives
// from OneContigSpaceCardGeneration. This should be cleaned up,
// see CR 6897789..
void OneContigSpaceCardGeneration::object_iterate(ObjectClosure* blk) { void OneContigSpaceCardGeneration::object_iterate(ObjectClosure* blk) {
_the_space->object_iterate(blk); _the_space->object_iterate(blk);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册