RFR(M/L): 7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap
Vitaly Davidovich
vitalyd at gmail.com
Thu Jan 24 00:06:46 UTC 2013
Hi John,
Thanks for the feedback. Regarding the asserts question, here's an example
g1HotCardCache.cpp):
assert(worker_i < (int) (ParallelGCThreads == 0 ? 1 : ParallelGCThreads),
"incorrect worker id");
Would be useful to see worker_i here?
Another in g1CardCounts.hpp:
67 void check_card_num(size_t card_num, const char* msg) {
68 assert(card_num >= 0 && card_num < _committed_max_card_num, msg);
69 }
The msg will have the card_num, but you won't have _committed_max_card_num
reported, for example. That's the kind of thing I meant.
There may be a few more examples like that, but this came up during quick
scan.
Thanks
Sent from my phone
On Jan 23, 2013 6:36 PM, "John Cuthbertson" <john.cuthbertson at oracle.com>
wrote:
> Hi Vitaly,
>
> Second response. Details inline....
>
> On 1/15/2013 8:49 PM, Vitaly Davidovich wrote:
>
>>
>> A few more comments/suggestions:
>>
>> In g1CardCounts::ptr_2_card_num()**, I'd assert that card_ptr >=
>> _ct_bot. This is mostly to avoid a null card_ptr (or some other bogus
>> value) causing the subtraction to go negative but then wrap around to a
>> large size_t value that just happens to fit into the card range. Unlikely
>> and maybe this is too paranoid, so up to you.
>>
>>
> Good idea. Done. I'm all for being paranoid. I've also changed the
> subtraction to use pointer_delta:
>
> assert((size_t)card_ptr >= (size_t)_ct_bot, "wraparound?");
> size_t card_num = pointer_delta(card_ptr, _ct_bot, sizeof(jbyte));
>
>
> Also in this class, it's a bit strange that G1CardCounts::is_hot() also
>> increments the count. I know the comments in the header say that count is
>> updated but the name of the method implies it's just a read. Maybe call
>> add_card_count() and then add an is_hot(int) method and call that with the
>> return value of add_card_count?
>>
>>
> Let me think about that one. I was looking for a much simpler interface
> that returned whether a card was was hot. How it made that determination
> was up to it. But I'm leaning toward following your suggestion.
>
> G1CardCounts::clear_region -- there are some casts of const jbyte to
>> jbyte at bottom of method. Perhaps if ptr_2_card_num() were changed to be
>> taking const jbyte you wouldn't need the casts. I think marking as much
>> things const as possible is good in general anyway ...
>>
>>
> Good point. Done.
>
> In the various places where values are asserted to be in some range, it
>> may be useful to add the valid range to the error message so that if it
>> triggers you get a bit more context/diagnostic info.
>>
>>
> I thought I was doing that in most cases. Can you give some examples?
>
> Thanks,
>
> JohnC
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20130123/ce8f37a1/attachment.htm>
More information about the hotspot-gc-dev
mailing list