RFR: 8194759: Support caching class mirror objects
Ioi Lam
ioi.lam at oracle.com
Tue Feb 27 00:25:38 UTC 2018
On 2/26/18 3:21 PM, Jiangli Zhou wrote:
> Hi Ioi,
>
> Thanks for reviewing the update!
>
>> On Feb 26, 2018, at 2:25 PM, Ioi Lam <ioi.lam at oracle.com
>> <mailto:ioi.lam at oracle.com>> wrote:
>>
>> Hi Jiangli,
>>
>> The changes look good. I have a few style suggestions:
>>
>> 1.
>>
>> Is the "classpath_index >= _app_paths_start_index" necessary in the
>> following block? I think it's very rare that we would have signed
>> classes in the bootappend JAR files, so removing this check would
>> make the code simpler.
>>
>> // Ignore any App classes from signed JAR file during CDS archiving
>> // dumping
>> if (DumpSharedSpaces &&
>> SharedClassUtil::is_classpath_entry_signed(classpath_index) &&
>> classpath_index >= _app_paths_start_index) {
>> tty->print_cr("Preload Warning: Skipping %s from signed JAR",
>> context->class_name());
>> return false;
>> }
>
> This is the dead code path that I intended to remove but added back in
> the updated webrev per your request. :-) I filed JDK-8198447
> <https://bugs.openjdk.java.net/browse/JDK-8198447> and will handle it
> separately.
>
>>
>>
>> 2.
>>
>> For has_signer_and_not_archived -- I think it's still not clear that
>> this function applies only during dumping.
>>
>> How about always setting this flag (during run time and dump time),
>> then it can be renamed simply as "has_signers()". This function would
>> work both at run time and dump time (although there may not be a use
>> case for this function during normal run time …).
>
> Let’s keep has_signer_and_not_archived as is until there are other use
> case for it.
OK, how about renaming it to "is_signed_when_dumping"? Then it's clear
from the name that the function won't return true at runtime even when
the class is signed.
>
>>
>>
>> 3.
>>
>> I think you should move the THREAD_FIELDS_DO macro into
>> javaClasses.hpp and use that to declare the fields for Thread as
>> well. (Same for the other classes).
>>
>> This would avoid code duplication. Also, this means you can't declare
>> a new field without adding it to the THREAD_FIELDS_DO list.
>>
>> #define THREAD_FIELDS_DO(macro) \
>> macro(_name_offset, k, vmSymbols::name_name(),
>> string_signature, false); \
>> macro(_group_offset, k, vmSymbols::group_name(),
>> threadgroup_signature, false); \
>> macro(_contextClassLoader_offset, k,
>> vmSymbols::contextClassLoader_name(), classloader_signature, false); \
>> macro(_inheritedAccessControlContext_offset, k,
>> vmSymbols::inheritedAccessControlContext_name(),
>> accesscontrolcontext_signature, false); \
>> macro(_priority_offset, k, vmSymbols::priority_name(),
>> int_signature, false); \
>> macro(_daemon_offset, k, vmSymbols::daemon_name(),
>> bool_signature, false); \
>> macro(_eetop_offset, k, "eetop", long_signature, false); \
>> macro(_stillborn_offset, k, "stillborn", bool_signature, false); \
>> macro(_stackSize_offset, k, "stackSize", long_signature, false); \
>> macro(_tid_offset, k, "tid", long_signature, false); \
>> macro(_thread_status_offset, k, "threadStatus", int_signature,
>> false); \
>> macro(_park_blocker_offset, k, "parkBlocker", object_signature,
>> false); \
>> macro(_park_event_offset, k, "nativeParkEventPointer",
>> long_signature, false)
>>
>> class java_lang_Thread : AllStatic {
>> private:
>> // Note that for this class the layout changed between JDK1.and JDK1.3,
>> // so we compute the offsets at startup rather than hard-wiring them.
>> static int _name_offset;
>> static int _group_offset;
>> static int _contextClassLoader_offset;
>> static int _inheritedAccessControlContext_offset;
>> static int _priority_offset;
>> static int _eetop_offset;
>> static int _daemon_offset;
>> static int _stillborn_offset;
>> static int _stackSize_offset;
>> static int _tid_offset;
>> static int _thread_status_offset;
>> static int _park_blocker_offset;
>> static int _park_event_offset ;
>
> Actually, I played that idea when I made the macro changes and decided
> against it. Modifying the field declarations in javaClasses.hpp are
> beyond the scope of current change and adds additional risks. It
> deserves its own RFE. I will file a follow up RFE for the field
> declarations.
>
Sounds good. Thanks
- Ioi
> Thanks,
> Jiangli
>
>>
>> Thanks
>>
>> - Ioi
>>
>>
>> On 2/22/18 10:24 PM, Jiangli Zhou wrote:
>>> Here is the new webrev with updates that address feedbacks from
>>> Misha, Ioi, Coleen and Thomas:
>>>
>>> http://cr.openjdk.java.net/~jiangli/8194759/webrev.01/
>>> <http://cr.openjdk.java.net/%7Ejiangli/8194759/webrev.01/>
>>> <http://cr.openjdk.java.net/~jiangli/8194759/webrev.01/
>>> <http://cr.openjdk.java.net/%7Ejiangli/8194759/webrev.01/>>
>>>
>>> Incremental webrev:
>>> http://cr.openjdk.java.net/~jiangli/8194759/webrev.01.inc/
>>> <http://cr.openjdk.java.net/%7Ejiangli/8194759/webrev.01.inc/>
>>> <http://cr.openjdk.java.net/~jiangli/8194759/webrev.01.inc/
>>> <http://cr.openjdk.java.net/%7Ejiangli/8194759/webrev.01.inc/>>
>>>
>>> Rerunning tiered testing ...
>>>
>>> Thanks,
>>> Jiangli
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list