[RFR] 8061715: gc/g1/TestShrinkAuxiliaryData15.java fails with java.lang.RuntimeException: heap decommit failed - after > before

Andrey Zakharov andrey.x.zakharov at oracle.com
Thu Mar 12 13:16:42 UTC 2015


12.03.2015 15:55, Mikael Gerdin пишет:
> Andrey,
>
> On 2015-03-12 12:51, Andrey Zakharov wrote:
>> Tested in aurora as 742910.VMSQE.adhoc.JPRT.full. Looks good.
>> Thanks.
>>
>> 11.03.2015 20:17, Andrey Zakharov пишет:
>>>
>>> 09.03.2015 15:26, Thomas Schatzl пишет:
>>>> Hi Andrey,
>>>>
>>>> On Tue, 2015-03-03 at 18:40 +0300, Andrey Zakharov wrote:
>>>>> Fixed according comments.
>>>>>
>>>>> hotspot webrev:
>>>>> http://cr.openjdk.java.net/~azakharov/8061715/webrev.06/
>
> The following code is not correct with regards to the safepoint 
> protocol. You should not perform the ToNativeFromVM transition until 
> you have received the data from the VM. After the transition a GC 
> pause may occur while you are executing in 
> get_auxillary_data_memory_usage and you can get strange results.
>
>  328 WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env))
>  329   ResourceMark rm(THREAD);
>  330   ThreadToNativeFromVM ttn(thread);
>  331   G1CollectedHeap* g1h = G1CollectedHeap::heap();
>  332   MemoryUsage mu = g1h->get_auxiliary_data_memory_usage();
>  333
>  334   jclass jclass_memory_usage = 
> env->FindClass("java/lang/management/MemoryUsage");
>  335   CHECK_JNI_EXCEPTION_(env, NULL);
>  336   if (jclass_memory_usage == NULL) {
>
> I just found out that there is an existing function which creates a 
> java.lang.management.MemoryUsage from a C++ MemoryUsage object,
> MemoryService::create_MemoryUsage_obj(MemoryUsage usage, TRAPS)
>
> Using this you can get rid of the state transition altogether and do 
> something like:
>
> WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env))
>   G1CollectedHeap* g1h = G1CollectedHeap::heap();
>   MemoryUsage mu = g1h->get_auxiliary_data_memory_usage();
>   Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
>   return JNIHandles::make_local(env, h());
> WB_END
>
> This code is almost the same as jmm_GetMemoryPoolUsage in 
> management.cpp so if it doesn't compile see if I've missed something.
> I'm pretty sure you don't need a ResourceMark for this function since 
> it does not allocate any memory in the resource area.
>
> /Mikael

Hi, Mikael. Thanks for the tip. It makes things better here. But I'm in 
doubt about needless of ResourceMark. It exists in mentioned 
*jmm_GetMemoryPoolUsage:

*JVM_ENTRY(jobject, jmm_GetMemoryPoolUsage(JNIEnv* env, jobject obj))
*  ResourceMark rm(THREAD);*

   MemoryPool* pool = get_memory_pool_from_jobject(obj, CHECK_NULL);
   if (pool != NULL) {
     MemoryUsage usage = pool->get_memory_usage();
     Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
     return JNIHandles::make_local(env, h());
   } else {
     return NULL;
   }
JVM_END*

**
*
>
>>>>>
>>>>> hs-gc webrev:
>>>>> http://cr.openjdk.java.net/~azakharov/8061715/webrev.06/hs-gc/
>>>>>
>>>>> testing: in progress
>>>> Can you also provide the webrev for the hs-gc repository with the
>>>> changes to whitebox.java?
>>> Its provided.
>>> testing looks good, latest on sthjprt as 2015-03-11-152816.gtee.auxdata
>>> Thanks.
>>>
>>>> Thanks,
>>>>    Thomas
>>>>
>>>>
>>>>
>>>
>>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20150312/05c2decb/attachment.htm>


More information about the hotspot-gc-dev mailing list