回复: JvmtiExport::can_walk_any_space() usage in hotspot(Internet mail)

kalinshi(施慧) kalinshi at tencent.com
Fri Feb 26 03:15:39 UTC 2021


Thanks Dan!

   ping!

Regards
Hui

-----邮件原件-----
发件人: daniel.daugherty at oracle.com <daniel.daugherty at oracle.com> 
发送时间: 2021年2月23日 2:17
收件人: kalinshi(施慧) <kalinshi at tencent.com>; hotspot-dev at openjdk.java.net; hotspot-runtime-dev at openjdk.java.net; serviceability-dev at openjdk.java.net
主题: Re: JvmtiExport::can_walk_any_space() usage in hotspot(Internet mail)

Adding serviceability-dev at ... to this email thread since JVM/TI is maintained by the Serviceability Team...

Dan


On 2/22/21 3:29 AM, kalinshi(施慧) wrote:
> Hi hotspot experts,
>
> Would you help on my question about JvmtiExport::can_walk_any_space() check?
> Question is why JvmtiExport::can_walk_any_space() check is needed in CDS when mapping region?
>
> JvmtiExport::can_walk_any_space() method is only used in FileMapInfo::map_region for modifing region read-only mapping attribute.
> JvmtiExport::can_walk_any_space() is set true when jvmtiCapabilities.can_tag_objects is enabled.
> JVMTI capability can_tag_objects enables java heap iteration/object reference tracing, and JvmtiEnv::Set/GetTag doesn't modify read-only regions in shared archive (I might wrong).
>
> comments in latest code seems outdated, JvmtiExport::can_walk_any_space() doesn't disable sharing now.
> "
>    JvmtiExport::set_can_walk_any_space(
>      avail.can_tag_objects);   // disable sharing in onload phase
> "
>
> Back to initial code, class sharing is disabled when condition JvmtiExport::can_modify_any_class() || JvmtiExport::can_walk_any_space() is true.
> This matches above comment in JvmtiManageCapabilities::update.
> "
>    if (JvmtiExport::can_modify_any_class() || JvmtiExport::can_walk_any_space()) {
>      fail_continue("Tool agent requires sharing to be disabled.");
>      return false;
>    }
> "
>
> JvmtiExport::can_modify_any_class condition disables class data sharing when class file load hook (requires modify code and read only contents) is needed in initial code.
> Both checks are removed and used to determine region read/write attribute with following commits. These commits are mainly supporting class file load hook with CDS.
>
> 1. enable shared class when these tow checks on, modify/map all regions in shared archive as RW.
>     8054386: Allow Java debugging when CDS is enabled Map archive RW when debugging is enabled
>     8087153: EXCEPTION_ACCESS_VIOLATION when CDS RO section vanished 
> on win32
>     
> 2. Support class file load hook with CDS
>     8141341: CDS should be disabled if JvmtiExport::should_post_class_file_load_hook() is true Disable loading shared class if JvmtiExport::should_post_class_file_load_hook is true.
>     8078644: CDS needs to support JVMTI CFLH Support posting CLFH for shared classes.
>     
> 3. Fix jvmtiCapabilities::can_generate_all_class_hook_events inconsistent state when shared
>     8161605: The '!UseSharedSpaces' check is not need in 
> JvmtiManageCapabilities::recompute_always_capabilities
>     
> 4. Fix class file load hook error for early class hook event when shared
>     8212200: assert when shared java.lang.Object is redefined by JVMTI 
> agent
>
> Regards
> Hui




More information about the serviceability-dev mailing list