Review request (S): 7132311 G1: assert((s == klass->oop_size(this)) || (Universe::heap()->is_gc_active() && ((is_typeArray()...

Bengt Rutisson bengt.rutisson at oracle.com
Mon Jan 23 18:06:09 UTC 2012


Updated webrev based on comments from Tony below:
http://cr.openjdk.java.net/~brutisso/7132311/webrev.03/

Thanks Stefan and Tony for the quick reviews. As soon as JPRT is back 
online I will try to push this.

Bengt


On 2012-01-23 16:06, Tony Printezis wrote:
> Bengt,
>
> g1CollectedHeap.cpp:
>
> 1128     if (result != NULL&&  
> g1_policy()->need_to_start_conc_mark("STW humongous allocation")) {
> 1129       g1_policy()->set_initiate_conc_mark_if_possible();
> 1130     }
> 1131     return result;
>
> Should you maybe leave this in (it should be benign if the cycle is 
> already in progress or is about to start)? Imagine the following 
> scenario: a hum allocation is attempted, the old gen + hum allocation 
> size is just under the threshold, the hum allocation fails 
> concurrently (not enough contiguous regions to satisfy it), we do a 
> young GC to satisfy it, at the end of the young GC the old gen 
> (including the newly-promoted objects) + hum allocation size is over 
> the threshold (and maybe by a large amount if we promoted a lot). I 
> know it's a bit of a stretch....
>
> g1CollectorPolicy.cpp:
>
> 1142   if (_g1->mark_in_progress()) {
>
> (As discussed) Please change this to cmThread()->during_cycle().
>
> 1149   size_t total_estimated_bytes = cur_used_bytes + alloc_word_size 
> * BytesPerWord
>
> What's the different between BytesPerWord and HeapWordSize? I 
> generally use the latter.
>
> Also, thanks for updating the ergo_verbose entry points. However, 
> alloc_word_size is in words and you will print it as bytes (and it's 
> good to be consistent with the units anyway, given that everything 
> else is in bytes). Maybe just introduce a local field, 
> alloc_size_bytes, and use it both the condition as well as the 
> ergo_verbose output?
>
> Nits:
>
> g1CollectedHeap.cpp:
>
> 1056       result = humongous_obj_allocate(word_size);
> 1057
> 1058       if (result != NULL) {
> 1059         return result;
> 1060       }
>
> Can you delete line 1057. In the code the NULL test is generally on 
> the line after the assignment (at least, it should be in most of the 
> slow path allocation code).
>
> g1CollectorPolicy.hpp
>
> 802   bool need_to_start_conc_mark(const char* source, size_t 
> alloc_word_size);
>
> I'd give alloc_word_size a 0 default value to avoid passing 0 when a 
> size is not needed.
>
>
>
> On 1/23/2012 7:21 AM, Bengt Rutisson wrote:
>>
>> Hi all,
>>
>> Can I have one more review for this change, please? Stefan has 
>> already looked at it.
>>
>> http://cr.openjdk.java.net/~brutisso/7132311/webrev.02/
>>
>> The idea is that we move the check for whether or not we should 
>> initiate a marking cycle to before we allocate a humongous object. 
>> This way we can ignore the issue with uninitialized memory.
>>
>> Thanks,
>> Bengt
>>




More information about the hotspot-gc-dev mailing list