jdk10 : UseSharedSpaces flag and INCLUDE_CDS macro

Ioi Lam ioi.lam at oracle.com
Wed Jul 5 20:45:57 UTC 2017


Hi Matthias,

We don't use INCLUDE_CDS everywhere so we can avoid cluttering the code. 
In many cases, functions called inside if (UseSharedSpaces) are declared 
to have empty bodies. E.g.,

void VM_RedefineClasses::doit() {
   Thread *thread = Thread::current();

   if (UseSharedSpaces) {
     // Sharing is enabled so we remap the shared readonly space to
     // shared readwrite, private just in case we need to redefine
     // a shared class. We do the remap during the doit() phase of
     // the safepoint to be safer.
     if (!MetaspaceShared::remap_shared_readonly_as_readwrite()) {
       log_info(redefine, class, load)("failed to remap shared readonly 
space to readwrite, private");
       _res = JVMTI_ERROR_INTERNAL;
       return;
     }
   }

class MetaspaceShared {
   static bool remap_shared_readonly_as_readwrite() NOT_CDS_RETURN_(true);


So hopefully the C++ compile will just elide all the code inside the if 
(!...) branch (also also the check for UseSharedSpaces). There may be a 
few places where we should have added #if INCLUDE_CDS. For example, 
InstanceKlass::restore_unshareable_info.

We are regularly building the minimal VM which doesn't have INCLUDE_CDS. 
So it looks like the VM will be built correctly when INCLUDE_CDS is not 
specified, but it probably has a bit of dead code.

Are you mainly trying to reduce the size of libjvm when CDS is not enabled?

Thanks
- Ioi


On 7/5/17 6:36 AM, Baesken, Matthias wrote:
> Hello, when looking into CDS related build options,  I noticed  that most  code-parts  that are executed only when UseSharedSpaces is set,
>    are guarded by  the compile-time macro    INCLUDE_CDS   to support  switching off   compilation of this coding
>    when  CDS is disabled at compile time  :
>
>
> See  hotspot/make/lib/JvmFeatures.gmk  :
>
> ifneq ($(call check-jvm-feature, cds), true)
>    JVM_CFLAGS_FEATURES += -DINCLUDE_CDS=0
>
>
>
> However some places miss the compile-time guarding ( #if INCLUDE_CDS  ....) for example in
>
>
> share/vm/prims/jvmtiRedefineClasses.cpp
> share/vm/memory/universe.cpp
>
> (also some other places)
>
>
> Should I prepare a change and add the compile-time guard at the places where missing as well ?
>
> Best regards, Matthias




More information about the build-dev mailing list