# HG changeset patch # User ysr # Date 1214264977 25200 # Node ID 60fb9c4db4e6033bf7cb28679c91d9424bc39774 # Parent bb254e57d2f48fecb3255e90d27aaeabf42fd70d 6718086: CMS assert: _concurrent_iteration_safe_limit update missed Summary: Initialize the field correctly in ContiguousSpace's constructor and initialize() methods, using the latter for the survivor spaces upon initial construction or a subsequent resizing of the young generation. Add some missing Space sub-class constructors. Reviewed-by: apetrusenko diff -r bb254e57d2f4 -r 60fb9c4db4e6 src/share/vm/memory/defNewGeneration.cpp --- a/src/share/vm/memory/defNewGeneration.cpp Tue Jun 17 08:40:48 2008 -0700 +++ b/src/share/vm/memory/defNewGeneration.cpp Mon Jun 23 16:49:37 2008 -0700 @@ -227,8 +227,8 @@ eden()->mangle_unused_area(); } } - from()->set_bounds(fromMR); from()->clear(); - to()->set_bounds(toMR); to()->clear(); + from()->initialize(fromMR, true /* clear */); + to()->initialize( toMR, true /* clear */); // Make sure we compact eden, then from. // The to-space is normally empty before a compaction so need // not be considered. The exception is during promotion diff -r bb254e57d2f4 -r 60fb9c4db4e6 src/share/vm/memory/space.cpp --- a/src/share/vm/memory/space.cpp Tue Jun 17 08:40:48 2008 -0700 +++ b/src/share/vm/memory/space.cpp Mon Jun 23 16:49:37 2008 -0700 @@ -276,6 +276,7 @@ set_top(bottom()); set_saved_mark(); if (clear_space) clear(); + set_concurrent_iteration_safe_limit(top()); } void ContiguousSpace::clear() { diff -r bb254e57d2f4 -r 60fb9c4db4e6 src/share/vm/memory/space.hpp --- a/src/share/vm/memory/space.hpp Tue Jun 17 08:40:48 2008 -0700 +++ b/src/share/vm/memory/space.hpp Mon Jun 23 16:49:37 2008 -0700 @@ -373,6 +373,9 @@ CompactibleSpace* _next_compaction_space; public: + CompactibleSpace() : + _compaction_top(NULL), _next_compaction_space(NULL) {} + virtual void initialize(MemRegion mr, bool clear_space); virtual void clear(); @@ -766,6 +769,10 @@ inline HeapWord* par_allocate_impl(size_t word_size, HeapWord* end_value); public: + ContiguousSpace() : + _top(NULL), + _concurrent_iteration_safe_limit(NULL) {} + virtual void initialize(MemRegion mr, bool clear_space); // Accessors @@ -970,7 +977,8 @@ HeapWord* _soft_end; public: - EdenSpace(DefNewGeneration* gen) : _gen(gen) { _soft_end = NULL; } + EdenSpace(DefNewGeneration* gen) : + _gen(gen), _soft_end(NULL) {} // Get/set just the 'soft' limit. HeapWord* soft_end() { return _soft_end; }