Request for review 7178145: Change constMethodOop::_exception_table to optionally inlined u2 table

Jiangli Zhou jiangli.zhou at oracle.com
Tue Jun 19 18:08:12 PDT 2012


Hi Keith,

Here is the updated webrev: 
http://cr.openjdk.java.net/~jiangli/7178145/webrev.01/.

I fixed the loops in  methodOop::fast_exception_handler_bci_for(), 
ClassVerifier::verify_exception_handler_tableOn() and 
ClassVerifier::verify_exception_handler_targets() to reacquire the 
exception table inside the loop. I didn't apply the same change to 
GenerateOopMap::mark_bbheaders_and_count_gc_points(), since it was only 
using a typeArrayOop instead a handle to the table before. Please let me 
know if that looks okay to you.

Thanks,

Jiangli


06/19/2012 04:40 PM, Jiangli Zhou wrote:
> Hi Keith,
>
> Thanks for the review and comments!
>
> On 06/19/2012 04:01 PM, keith mcguigan wrote:
>>
>> Hi Jiangli,
>>
>> In methodOop.hpp, the class ExceptionTable holds a raw pointer into 
>> the heap (the pointer to the embedded table).  This is used in 
>> methodOop::fast_exception_handler_bci_for() in a loop when searching 
>> for the bci.  If class loading is initiated , a Full GC could occur 
>> which could invalidate the pointer in ExceptionTable on the next pass 
>> through the loop.  Need some sort of handle or recalculation in that 
>> loop. Perhaps a No_Safepoint_Verifier to catch any other places like 
>> this?
>
> Wow, so the embedded table could move along with the methodOop when 
> fast_exception_handler_bci_for() is looping through it if there is a 
> GC happening at the same time due to class loading. Thanks for 
> pointing that out! The original code was ok as it was using a 
> typeArrayHandle to the separate table, which is GC 'safe'.
>
> It seems No_Safepoint_Verifier asserts if it passes a safe point, 
> which might not be what fast_exception_handler_bci_for() should do. 
> I'll take your first suggestion and initialize the table inside the 
> loop. :)
>
>>
>> Also in ClassVerifier::verify_exception_handler_targets().
>>
>> I didn't look to see if this was possible in generateOopMaps code 
>> too, but you might want to take a look at that too -- it's definitely 
>> looping with that raw pointer (I didn't follow through to see if it 
>> could safepoint).
>
> Will fix those.
>
>>
>> Other than that one issue, I think this looks really good.
>
> Thanks a lot!
>
> Jiangli
>>
>> -- 
>> - Keith
>>
>> On 6/19/2012 5:24 PM, Jiangli Zhou wrote:
>>> Hi,
>>>
>>> Please review the following webrev for method exception handler table
>>> memory reduction:
>>>
>>> http://javaweb.sfbay.sun.com/~jianzhou/webrev.exceptiontable/
>>>
>>> Per VM spec the method exception handler table is tuples of u2's, 
>>> but in
>>> hotspot the data are stored as ints in constMethodOop::_exception_table
>>> (a typeArray). The change reduces the exception handler table memory
>>> usage by:
>>>
>>>   * Changing the exception handler table from int array to u2 array.
>>>   * Making the exception handler table as conditionally allocated
>>>     inlined table in constMethod, and eliminate the _exception_table
>>>     field. The inlined table is only allocated when the exception table
>>>     attribute exists for the method.
>>>   * Removing the overhead of the extra typeArray, the data is directly
>>>     stored in the inlined table when exception handler exists for a 
>>> method.
>>>
>>> Tested with runthese, jprt and vm.quick.testlist. No noticeable
>>> performance degradation from specjvm98 and specjbb2005.
>>>
>>> ============================================================================== 
>>>
>>> logs.exceptiontable_baseline.1:
>>> Benchmark Samples Mean Stdev Geomean Weight
>>> specjbb2005 8 56372.58 763.16
>>> specjvm98 8 534.50 19.50
>>> ============================================================================== 
>>>
>>> logs.exceptiontable.1:
>>> Benchmark Samples Mean Stdev %Diff P Significant
>>> specjbb2005 8 56734.05 880.76 0.64 0.395 *
>>> specjvm98 8 531.05 21.00 -0.65 0.738 *
>>> ============================================================================== 
>>>
>>>
>>> ============================================================================== 
>>>
>>> logs.exceptiontable_baseline.2:
>>> Benchmark Samples Mean Stdev Geomean Weight
>>> specjvm98 8 527.63 17.10
>>> ============================================================================== 
>>>
>>> logs.exceptiontable.2:
>>> Benchmark Samples Mean Stdev %Diff P Significant
>>> specjvm98 8 536.79 20.54 1.74 0.349 *
>>> ============================================================================== 
>>>
>>>
>>> Thanks,
>>>
>>> Jiangli
>>>
>



More information about the hotspot-runtime-dev mailing list