RFR (M) 8249768: Move static oops and NullPointerException oops from Universe into OopStorage
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Wed Jul 22 11:50:50 UTC 2020
On 7/22/20 2:32 AM, David Holmes wrote:
> Hi Coleen,
>
> On 22/07/2020 12:19 am, coleen.phillimore at oracle.com wrote:
>>
>>
>> On 7/20/20 10:47 PM, David Holmes wrote:
>>> Hi Coleen,
>>>
>>> cc'ing serviceability due to SA changes.
>>>
>>> On 21/07/2020 6:53 am, coleen.phillimore at oracle.com wrote:
>>>> Summary: Move static oops into OopStorage and make NPE oops an
>>>> objArrayOop.
>>>>
>>>> I've broken up moving oops in Universe to OopStorage into several
>>>> parts. This change moves the global static oops. These OopHandles
>>>> are not released.
>>>
>>> Overall looks good. But two things ...
>>>
>>> 1. naming
>>>
>>> ! // preallocated error objects (no backtrace)
>>> ! static OopHandle _out_of_memory_error;
>>>
>>> // array of preallocated error objects with backtrace
>>> ! static OopHandle _preallocated_out_of_memory_error_array;
>>>
>>> Both of these are pre-allocated arrays of OopHandles, differing only
>>> in whether the underlying OOME has a backtrace or not. I find the
>>> newly introduced _out_of_memory_error unclear in that regard. At a
>>> minimum could _out_of_memory_error become _out_of_memory_errors ?
>>> But ideally can we name these two arrays in a more distinguishable way?
>>
>> I put this code in functions next to each other because it was
>> confusing. The _out_of_memory_error array is really preallocated
>> throwables, that are used to fill in the message for
>> preallocated_out_of_memory_errors if there are enough of the latter
>> left.
>> I could rename _out_of_memory_error =>
>> _out_of_memory_error_throwables ?
>
> That doesn't really help. As I said both of these variables are arrays
> of pre-allocated OOME instances (which are throwables) - the only
> difference is one set is single-use (as it can have its backtrace set)
> while the other is reusable. The existing variable
>
> _preallocated_out_of_memory_error_array
>
> tells you clearly it is an array of preallocated OOME instances (but
> doesn't saying anything about the backtrace or being single-use). The
> problem is that that is exactly what _out_of_memory_error is as well,
> but the name _out_of_memory_error doesn't convey that it is an array,
> nor that anything is pre-allocated (and also nothing about backtraces
> or re-usability). So given we now have two arrays of extremely similar
> things, it would be clearer to give these clearer names. If we want to
> keep the existing
>
> _preallocated_out_of_memory_error_array
>
> name, then the new array should indicate how it differs e.g.
>
> _reusable_preallocated_out_of_memory_error_array
> What do you think?
This confuses me more than the code does. Which array is this? This is
a terrible name for whichever one it is (I guess the original
_out_of_memory_error). I don't think it's interesting to have the name
_array in it, but being plural does tell you what it is, like
_out_of_memory_errors. The implementation is a bit weird and some long
name isn't going to help anyone. The abstraction that this is
_out_of_memory_errors is all anyone outside this implementation needs to
know.
>
> I also spotted a minor nit:
>
> 187 oop Universe::system_thread_group() { return
> _system_thread_group.resolve(); }
> 188 void Universe::set_system_thread_group(oop group) {
> _system_thread_group = OopHandle(vm_global(), group); }
>
> Extra spaces after oop on L187.
Ok I'll fix the spacing.
Thanks,
Coleen
>
> Thanks,
> David
> -----
>
>>>
>>> 2. SA
>>>
>>> You've simply deleted all the SA/vmstructs code that referenced the
>>> oops that are no longer present. Does the SA not care about these
>>> things and need access to them? (I don't know hence cc to
>>> serviceability folk.)
>>
>> Yes, the SA code was never used, so I deleted it. SA might need in
>> oop inspection to add walking Universe::vm_global() OopStorage area
>> to find where oops come from if there's an error but there doesn't
>> seem to be any other reason for SA to use these oops.
>>
>> Thanks,
>> Coleen
>>
>>>
>>> Thanks,
>>> David
>>> -----
>>>
>>>> This has been tested with tier1-3 and on also remote-build -b
>>>> linux-arm32,linux-ppc64le-debug,linux-s390x-debug,linux-x64-zero.
>>>>
>>>> open webrev at
>>>> http://cr.openjdk.java.net/~coleenp/2020/8249768.01/webrev
>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8249768
>>>>
>>>> Thanks,
>>>> Coleen
>>
More information about the hotspot-dev
mailing list