RFR: 8241371: Refactor and consolidate package_from_name
Lois Foltan
lois.foltan at oracle.com
Mon Mar 23 14:13:02 UTC 2020
On 3/23/2020 10:07 AM, Claes Redestad wrote:
>
>
> On 2020-03-23 14:41, Lois Foltan wrote:
>>>
>>>
>>> http://cr.openjdk.java.net/~redestad/8241371/open.01/
>>>
>>> /Claes
>>
>> Hi Claes,
>>
>> This looks great, thank you for looking into this improvement!
>
> Thanks for reviewing, Lois!
>
>> Few review comments:
>>
>> - classfile/classLoader.cpp
>> line #181: ClassLoader::package_from_class_name(), could we remove
>> all the checks for "if (bad_class_name != NULL)" in favor of an
>> assert ahead of line #182 that just "assert(bad_class_name != NULL,
>> "caller did not set bad_class_name correctly");"
>
> Hmm, passing NULL for bad_class_name is the common case, since only one
> caller is testing for malformed class names.
>
> As a future simplification/micro-optimization I think we could get rid
> of the first test (if (name == NULL)) and replace that and a few other
> NULL-checks with asserts since they seem to be impossible. I've gotten
> that through tier1-3, but decided I did not want to overburden this RFE.
Ideally I wish we could get rid of the parameter all together, but that
is for another time.
>
>> line #197: I still wish we could get rid of that do while loop. Would
>> searching for the last '[' be better performance wise? Like
>> UTF8::strrchr(start, utf_len, JVM_SIGNATURE_ARRAY)?
>
> I think that could have some cost since we'll scan the entire string.
>
> Perhaps an UTF8::mismatch(start, end, JVM_SIGNATURE_ARRAY) could be
> added, but the if-do-while construct is nice here since the check for
> JVM_SIGNATURE_CLASS is moved off the critical path. Either way I think
> this is out of scope for this RFE, since the do-while loop is pre-
> existing?
Agree, thanks for considering it.
>
>>
>> - gtest/runtime/test_classLoader.cpp
>> please include a test that has a multi-dimensional array
>
> Adding:
>
> TEST_VM(ClassLoader, class_multiarray) {
> bool bad_class_name = false;
> TempNewSymbol name = SymbolTable::new_symbol("[[package/class");
> TempNewSymbol retval = ClassLoader::package_from_class_name(name,
> &bad_class_name);
> ASSERT_FALSE(bad_class_name) << "Function set bad_class_name with
> class array";
> ASSERT_TRUE(retval->equals("package")) << "Wrong package for class
> with leading bracket";
> }
Thank you!
>
> OK, or do you need a new webrev?
No, thanks!
>
> /Claes
More information about the hotspot-runtime-dev
mailing list