ResourceExhausted JVMTI event and -XX:*OnOutOfMemoryError

Daniel D. Daugherty daniel.daugherty at oracle.com
Tue Jul 23 13:57:21 UTC 2019


I agree with David's opinion here. Please do not make this change.

Dan


On 7/23/19 7:08 AM, David Holmes wrote:
> On 23/07/2019 6:16 pm, Yasumasa Suenaga wrote:
>> Sorry, the format is broken... I re-sent the email:
>>
>>
>> There are not documented the relation between -XX:*OnOutOfMemoryError 
>> and ResourceExhausted,
>> but JVMTI spec says ResourceExhausted is sent when VM resource are 
>> exhausted.
>>
>> https://docs.oracle.com/en/java/javase/12/docs/specs/jvmti.html#ResourceExhausted 
>
>
> The JVMTI spec can't say anything about -XX:*OnOutOfMemoryError as 
> they are a hotspot implementation detail. If you use the -XX flag you 
> get whatever the hotspot implementation does. That may override normal 
> specified behaviour. For example, if you use 
> -XX:+ExitOnOutOfMemoryError you can't then complain that the VM never 
> executes a catch block for OutOfMemoryError because it exited first! 
> It's the same for the event processing - we're exiting before we reach 
> that code.
>
>> As you said, we should not do other things when OutOfMemoryError is 
>> occurred.
>> But I think it should be compliant when we will use Java related code 
>> in the event handler.
>> If we do with C/C++ only (e.g. call printf()), I think we can do that.
>
> But we don't know what the handler will do. Nor do we know why the -XX 
> flag was used, or even what it may do in some cases.
>
>> If all codes should not be run when OutOfMemoryError is occurred,
>> ResourceExhausted should be obsoleted, or we need to add the note for 
>> JVMTI document.
>
> There is no logical argument there for obsoleting the 
> ResourceExhausted event.
>
> I understand you want the event to be posted before the flag is 
> processed, but somebody else may want it exactly as it is - e.g. 
> dumping the heap before their event handler does some cleanup/recovery 
> work.
>
> And as I said the JVM TI spec knows nothing of this XX flag so cannot 
> say anything about it.
>
> David
> -----
>
>>
>> Thanks,
>>
>> Yasumasa
>>
>>
>> On 2019/07/23 16:43, David Holmes wrote:
>>> Hi Yasumasa,
>>>
>>> On 23/07/2019 5:24 pm, Yasumasa Suenaga wrote:
>>>> Hi all,
>>>>
>>>> I tried to use JVMTI agent which hooks ResourceExhausted event and 
>>>> -XX:ExitOnOutOfMemoryError together.
>>>> The process was exited when OutOfMemoryError was occurred, but 
>>>> ResourceExhausted event was not fired.
>>>>
>>>> I checked HotSpot implementation, -XX:*OutOfMemoryError is 
>>>> processed before JVMTI event processing.
>>>>
>>>> http://hg.openjdk.java.net/jdk/jdk/file/d999a1a11485/src/hotspot/share/gc/shared/memAllocator.cpp#l125 
>>>>
>>>>
>>>> IMHO ResourceExhausted should be called before -XX:*OutOfMemoryError.
>>>> If it is a bug, I will file it to JBS and fix it.
>>>
>>> I don't think it is a bug. First, there's no specification for how 
>>> these two things interact - -XX:*OnOutOfMemoryError is just a VM 
>>> specific debugging/diagnostic hook. Second, if we're out of memory 
>>> then we don't want to be doing other things which may need to also 
>>> acquire memory. Third, no matter which way you code this someone may 
>>> in some case want it the other way - and it's not worth coding to 
>>> allow such flexibility IMO.
>>>
>>> Just my $2. :)
>>>
>>> Cheers,
>>> David
>>>
>>>>
>>>> Thanks,
>>>>
>>>> Yasumasa




More information about the hotspot-gc-dev mailing list