RFR: JDK-8016309 - assert(eden_size > 0 && survivor_size > 0) failed

Jesper Wilhelmsson jesper.wilhelmsson at oracle.com
Thu Oct 31 15:50:16 UTC 2013


Hi John,

Thanks for the review!

I have fixed the things you commented on. Rather than making a new webrev for 
the entire change I made one to put on top of the previous change. This way you 
can see exactly what I have changed this time without having to look through all 
of it again.

The new patch:

http://cr.openjdk.java.net/~jwilhelm/8016309/Bugfix/webrev.4/

Comments inline.

John Coomes skrev 30/10/13 6:28 PM:
> Jesper Wilhelmsson (jesper.wilhelmsson at oracle.com) wrote:
>> Hi Thomas,
>>
>> Thanks for looking at this!
>>
>> Comments inline.
>>
>> ...
>> A new webrev is available now with changes based on your comments and comments
>> from John Coomes. Right now it applies cleanly to hotspot-gc. The bugfix builds
>> on top of the cleanup, so apply the cleanup first. The cleanup is unchanged and
>> has gotten sufficient reviews by now.
>>
>> Cleanup: http://cr.openjdk.java.net/~jwilhelm/8016309/Cleanup/webrev.3/
>>
>> Bugfix:  http://cr.openjdk.java.net/~jwilhelm/8016309/Bugfix/webrev.3/
>
> Hi Jesper,
>
> Generally looks good; some comments below.
>
> collectorPolicy.hpp:
>
> 	default_gen_alignment() is 64K heapwords, which was the value
> 	from the old ParallelScavengeHeap::intra_heap_alignment().  The
> 	latter applied only to ParallelScavengeHeap, but the former now
> 	applies to CMS and SerialGC and G1, so the alignment for those
> 	GCs has been increased unnecessarily.  There should instead be a
> 	specialized default_gen_alignment() for ParallelScavenge (in
> 	GenerationSizer) with the larger value.

G1 has its own initialize_alignments so it should be good. For the others, the 
changes in the patch will allow CMS and Serial to keep using the smaller alignment.

> 	The assert_*_info() methods should be wrapped in DEBUG_ONLY() to
> 	ensure there's no code in the product vm.

How much do we trust the compilers to remove unused code? In the patch I have 
wrapped the whole methods in DEBUG_ONLY(), but if we think that the compilers 
will remove dead code it would be enough to wrap the calls.
Wrapping the whole methods will however allow the compiler to make sure they are 
not called in a product build.

>
> collectorPolicy.cpp:
>
> - GenCollectorPolicy::initialize_flags()
>
> 	If NewSize > MaxNewSize, the old code would increase MaxNewSize;
> 	the new code will exit w/an error.  That behavior shouldn't be
> 	changed as part of this bug fix, and not this late in jdk8.

Sure, I'll change that back. I do think we should try to be less forgiving when 
the user sets conflicting flags though. (This exit only happens if the user has 
set both NewSize and MaxNewSize.)

> 	There should be an assert that
> 		 _heap_alignment % _gen_alignment == 0
> 	either here or in assert_size_info().

Agreed. Fixed.

>
> 	Syntax nits:
>
> 	There are several local vars with camel-case names that should
> 	be lower-case with underscores (e.g., smallestNewSize should be
> 	smallest_new_size)

OK. Fixed.

> 	The method is big now and should be split (ok to do later, if
> 	necessary).

There are a few more cleanups of these classes planned so I'll put that on my 
todo list.

>
> generationSizer.hpp:
>
> 	You've made initialize_size_info, initialize_flags() and
> 	initialize_size_info() private.  They're protected in
> 	superclasses.

Oops. Fixed.

> 	I think a generationSizer.cpp is needed, instead of making these
> 	methods inline (they're not relevant to performance).

OK. Done.

> 	I don't like that after the page size is selected in
> 	GenerationSizer::initialize_size_info(), the entire sizing
> 	calculation is redone.  It's partially an artifact of the
> 	structure of the old code, so I'm ok with it for now as long as
> 	it's revisited later (but please file an issue).

I agree and I have an idea on how to do it better. I have created an RFE to fix 
this: https://bugs.openjdk.java.net/browse/JDK-8027649

Thanks!
/Jesper

>
> -John
>



More information about the hotspot-gc-dev mailing list