RFR (S): 8192003: Refactor weak references in StringTable to use the Access API
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Mon Jan 8 13:26:23 UTC 2018
Hi Erik,
The renaming looks good.
On 1/8/18 6:04 AM, Erik Österlund wrote:
> Hi Coleen,
>
> Thank you for the review.
>
> On 2017-12-12 23:14, coleen.phillimore at oracle.com wrote:
>>
>> Hi Erik,
>>
>> This looks great. Would obj_field_access<>() be a better name than
>> obj_field_special<> since it's the access which is so special?
>
> Sure, that sounds good to me.
>
> Incremental webrev:
> cr.openjdk.java.net/~eosterlund/8192003/webrev.01_02/
>
> Full webrev:
> cr.openjdk.java.net/~eosterlund/8192003/webrev.02/
>
>> Like in the other tables, it would be nice to disallow the literal()
>> call for Hashtable<oop>s so we don't mistakenly add one. Can you
>> declare a ShouldNotReachHere() literal function for these? Or
>> version with no body that would cause a linktime error?
>
> Yes, but perhaps that should be done as a follow up RFE after these
> tables have been purged from evil.
>
Yes, not now. We are working on a concurrent hashtable for these
anyway, so this problem is likely to go away.
thanks,
Coleen
> Thanks,
> /Erik
>
>> Thanks,
>> Coleen
>>
>>
>> On 11/30/17 8:44 AM, Erik Österlund wrote:
>>> Hi Per,
>>>
>>> Thank you for reviewing this.
>>>
>>> New full webrev:
>>> http://cr.openjdk.java.net/~eosterlund/8192003/webrev.01/
>>>
>>> New incremental webrev:
>>> http://cr.openjdk.java.net/~eosterlund/8192003/webrev.00_01/
>>>
>>> On 2017-11-30 11:32, Per Liden wrote:
>>>> Hi Erik,
>>>>
>>>> On 2017-11-28 17:50, Erik Österlund wrote:
>>>>> Hi,
>>>>>
>>>>> The StringTable contains weak references to oops. Today the weak
>>>>> semantics is managed using explicit calls to G1 SATB enqueue
>>>>> barriers.
>>>>>
>>>>> Now that the Access API is available, it should be used instead as
>>>>> it is
>>>>> more modular.
>>>>>
>>>>> This change fixes that by making these oops ON_PHANTOM_OOP_REF with a
>>>>> corresponding AS_NO_KEEPALIVE accessor when we do not want to keep it
>>>>> alive, much like my previous changes to other weak tables.
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~eosterlund/8192003/webrev.00/
>>>>
>>>> share/classfile/javaClasses.inline.hpp
>>>> --------------------------------------
>>>>
>>>> 57 typeArrayOop java_lang_String::value_no_keepalive(oop
>>>> java_string) {
>>>> 58 assert(initialized && (value_offset > 0), "Must be
>>>> initialized");
>>>> 59 assert(is_instance(java_string), "must be java_string");
>>>> 60 oop value =
>>>> HeapAccess<AS_NO_KEEPALIVE>::oop_load_at(java_string, value_offset);
>>>> 61 return (typeArrayOop)value;
>>>> 62 }
>>>>
>>>> How about pushing this barrier down to oopDesc, with a
>>>> oopDesc::obj_field_special_access<DecoratorSet D>(...) function?
>>>
>>> Sounds doable. Fixed. (Although I called the method just
>>> "obj_field_special", hope nobody minds...)
>>>
>>>>
>>>> 76 typeArrayOop value =
>>>> java_lang_String::value_no_keepalive(java_string);
>>>> 77 assert(initialized, "Must be initialized");
>>>> 78 assert(is_instance(java_string), "must be java_string");
>>>>
>>>> Looks like you accidentally moved the value_no_keepalive() call
>>>> above the asserts?
>>>
>>> Fixed.
>>>
>>>>
>>>> share/classfile/stringTable.cpp
>>>> -------------------------------
>>>>
>>>> 155 oop string = string_object_no_keepalive(l);
>>>> 156 if (java_lang_String::equals(string, name, len)) {
>>>> 157 return string_object(l);
>>>> 158 }
>>>>
>>>> Can we please add a comment here, saying that returning "string"
>>>> would be very bad, or maybe even fold this a bit, so that no one
>>>> will be tempted to ever return that value, something like:
>>>>
>>>> if (java_lang_String::equals(string_object_no_keepalive(l), name,
>>>> len)) {
>>>> // Comment saying why we must call string_object() here...
>>>> return string_object(l);
>>>> }
>>>
>>> Fixed.
>>>
>>> Thanks,
>>> /Erik
>>>
>>>> cheers,
>>>> Per
>>>>
>>>>>
>>>>> Bug:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8192003
>>>>>
>>>>> Thanks,
>>>>> /Erik
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list