Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JDK-8302989: Add missing INCLUDE_CDS checks #12691

Closed
wants to merge 4 commits into from

Conversation

MBaesken
Copy link
Member

@MBaesken MBaesken commented Feb 21, 2023

The cds only coding in hotspot is usually guarded with the INCLUDE_CDS macro so that it can be removed at compile time in case the correct configure flags are set.
However at some places INCLUDE_CDS is missing and should be added.

One question - should (additionally to the UseSharedSpaces code section) the DumpSharedSpaces code sections be guarded as well with INCLUDE_CDS macros ?


Progress

  • Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue

Issue

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/12691/head:pull/12691
$ git checkout pull/12691

Update a local copy of the PR:
$ git checkout pull/12691
$ git pull https://git.openjdk.org/jdk.git pull/12691/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 12691

View PR using the GUI difftool:
$ git pr show -t 12691

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/12691.diff

Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Feb 21, 2023

👋 Welcome back mbaesken! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr Pull request is ready for review label Feb 21, 2023
@openjdk
Copy link

openjdk bot commented Feb 21, 2023

@MBaesken The following label will be automatically applied to this pull request:

  • hotspot

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added the hotspot hotspot-dev@openjdk.org label Feb 21, 2023
@mlbridge
Copy link

mlbridge bot commented Feb 21, 2023

Webrevs

@dholmes-ora
Copy link
Member

The CDS related source code is not 100% compile-time conditionalized. Typically we only exclude code that can't compile without the CDS specific files being compiled. Othercode won't execute due to the value of the "flags" in those cases. If you want to 100% conditionalize CDS related code then you need more changes than just those outlined here.

Are you actually trying to solve a problem or was this just an observation?

@MBaesken
Copy link
Member Author

Are you actually trying to solve a problem or was this just an observation?

Hi David, this was about getting less code compiled into the libjvm in case cds is disabled by configure.

Copy link
Contributor

@RealLucy RealLucy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me.
"Don't compile inactive code" is a good principle.

@openjdk
Copy link

openjdk bot commented Feb 23, 2023

@MBaesken This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8302989: Add missing INCLUDE_CDS checks

Reviewed-by: lucy

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 538 new commits pushed to the master branch:

  • b062b1b: 8304743: Compile_lock and SystemDictionary updates
  • df819cf: 8304945: StringBuilder and StringBuffer should implement Appendable explicitly
  • 312bbe7: 8305485: Problemlist runtime/Thread/TestAlwaysPreTouchStacks.java
  • 50e31e0: 8305442: (bf) Direct and view implementations of CharBuffer.toString(int, int) do not need to catch SIOBE
  • 85e3974: 8304014: Convert test/jdk/java/util/zip/ZipFile/CorruptedZipFiles.java to junit
  • 40aea04: 8278268: (ch) InputStream returned by Channels.newInputStream should have fast path for FileChannel targets
  • 9b9b5a7: 8302323: Add repeat methods to StringBuilder/StringBuffer
  • dd7ca75: 8305478: [REDO] disable gtest/NMTGtests.java sub-tests failing due to JDK-8305414
  • f9827ad: 8288109: HttpExchangeImpl.setAttribute does not allow null value after JDK-8266897
  • 6010de0: 8305417: disable gtest/NMTGtests.java sub-tests failing due to JDK-8305414
  • ... and 528 more: https://git.openjdk.org/jdk/compare/02eb240c7126cf539baca21869ee2b382b28708c...master

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Feb 23, 2023
@dholmes-ora
Copy link
Member

How much space in libjvm does this save? There is a trade-off with code readability when doing this.

If the aim is to get 100% conditional code then you need to do more. Do plan to do that or just this small tweak?

@MBaesken
Copy link
Member Author

How much space in libjvm does this save? There is a trade-off with code readability when doing this.

If the aim is to get 100% conditional code then you need to do more. Do plan to do that or just this small tweak?

Hi David, I would not use the macro with one - liners , I think this is not worth the effort. So no goal to get to 100 %.
It is more like a pragmatic approach (and for the UseSharedSpaces sections it is done already mostly).

One question - should (additionally to the UseSharedSpaces code section) the DumpSharedSpaces code sections be guarded as well with INCLUDE_CDS macros

I wasn't sure about the DumpSharedSpaces sections, usually the UseSharedSpaces are guarded with a few exceptions like those addressed in this change.

@dholmes-ora
Copy link
Member

So you avoid doing e.g.

if (RewriteBytecodes CDS_ONLY(&& !UseSharedSpaces && !DumpSharedSpaces)) {

and

CDS_ONLY(assert(!UseSharedSpaces, "UsedSharedSpaces not supported with exploded module builds");) ***

but what about the code in Metaspace::global_initialize()? Looks the the INCLUDE_CDS section there needs expanding. And Universe::genesis is a bit inconsistent about excluding or not. And InstanceRefKlass::update_nonstatic_oop_maps looks like a candidate too. And realistically we shouldn't even be compiling systemDictionaryShared.cpp in a non-CDS build, but that would take a lot of additional conditionalization.

I'm just not seeing that converting a handful of sites is really beneficial. The flags themselves are not normal flags defined for CDS_ONLY precisely because we wanted them available without having to conditionalize every single usage. I'm not looking to "block" this but I can't really endorse it either.

*** there is probably potential for adding a cds_assert macro to handle a bunch of CDS-only assertions.

@MBaesken
Copy link
Member Author

So you avoid doing e.g.

if (RewriteBytecodes CDS_ONLY(&& !UseSharedSpaces && !DumpSharedSpaces)) {

and

CDS_ONLY(assert(!UseSharedSpaces, "UsedSharedSpaces not supported with exploded module builds");) ***

but what about the code in Metaspace::global_initialize()? Looks the the INCLUDE_CDS section there needs expanding. And Universe::genesis is a bit inconsistent about excluding or not. And InstanceRefKlass::update_nonstatic_oop_maps looks like a candidate too. And realistically we shouldn't even be compiling systemDictionaryShared.cpp in a non-CDS build, but that would take a lot of additional conditionalization.

Hi David, systemDictionaryShared.cpp is already not compiled in non-CDS mode, see hotspot/lib/JvmFeatures.gmk .
Regarding the other places you mentioned, InstanceRefKlass::update_nonstatic_oop_maps , the UseSharedSpaces section there might indeed be guarded by INCLUDE_CDS - should I add this ? (on the other hand this section includes just asserts so I would expect that the whole code gets optimized out anyway in a product build.

I'm just not seeing that converting a handful of sites is really beneficial. The flags themselves are not normal flags defined for CDS_ONLY precisely because we wanted them available without having to conditionalize every single usage. I'm not looking to "block" this but I can't really endorse it either.

The conversion of a handful of sites is just an addition to the already rather common usage of the macro. Nothin new really ...

*** there is probably potential for adding a cds_assert macro to handle a bunch of CDS-only assertions.

Maybe in a separate issue, that do you think ? Do you have some example places where to use it ?

@dholmes-ora
Copy link
Member

systemDictionaryShared.cpp is already not compiled in non-CDS mode, see hotspot/lib/JvmFeatures.gmk

Sorry I must have misread something.

The conversion of a handful of sites is just an addition to the already rather common usage of the macro. Nothin new really ...

Nothing new but it doesn't really add anything either; especially when there remains so much non-conditional usage.

Maybe in a separate issue, that do you think ? Do you have some example places where to use it ?

Up to you. These are what I spotted mainly:

./share/oops/instanceClassLoaderKlass.hpp:  InstanceClassLoaderKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
./share/oops/instanceMirrorKlass.hpp:  InstanceMirrorKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
./share/oops/arrayKlass.hpp:  ArrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); }
./share/oops/constantPool.hpp:  ConstantPool() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
./share/oops/instanceRefKlass.hpp:  InstanceRefKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
./share/oops/instanceStackChunkKlass.hpp:  InstanceStackChunkKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
./share/oops/klass.hpp:  Klass() : _kind(KlassKind(-1)) { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); }
./share/oops/instanceKlass.hpp:  InstanceKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }

But looking closer these are all in constructors that should be CDS_ONLY.

@iklam
Copy link
Member

iklam commented Feb 27, 2023

It may be more profitable (and less work) if we change these variables to const when CDS is disabled:

extern bool DumpSharedSpaces;
extern bool DynamicDumpSharedSpaces;
extern bool RequireSharedSpaces;
extern "C" {
// Make sure UseSharedSpaces is accessible to the serviceability agent.
extern JNIEXPORT jboolean UseSharedSpaces;
}

But some changes may be needed in SA.

@MBaesken
Copy link
Member Author

It may be more profitable (and less work) if we change these variables to const when CDS is disabled:

extern bool DumpSharedSpaces;
extern bool DynamicDumpSharedSpaces;
extern bool RequireSharedSpaces;
extern "C" {
// Make sure UseSharedSpaces is accessible to the serviceability agent.
extern JNIEXPORT jboolean UseSharedSpaces;
}

But some changes may be needed in SA.

Hi Ioi, do you think this should be done for all 4 bools ?
Btw. when adding a const to UseSharedSpaces I run into something like this (when compiling with gcc, seems there is some issue when const is used together with JNIEXPORT , any ideas why ?
globalDefinitions.cpp:50:26: error: 'visibility' attribute ignored [-Werror=attributes]

@iklam
Copy link
Member

iklam commented Mar 1, 2023

It may be more profitable (and less work) if we change these variables to const when CDS is disabled:

extern bool DumpSharedSpaces;
extern bool DynamicDumpSharedSpaces;
extern bool RequireSharedSpaces;
extern "C" {
// Make sure UseSharedSpaces is accessible to the serviceability agent.
extern JNIEXPORT jboolean UseSharedSpaces;
}

But some changes may be needed in SA.

Hi Ioi, do you think this should be done for all 4 bools ? Btw. when adding a const to UseSharedSpaces I run into something like this (when compiling with gcc, seems there is some issue when const is used together with JNIEXPORT , any ideas why ? globalDefinitions.cpp:50:26: error: 'visibility' attribute ignored [-Werror=attributes]

I think it should be done for all four bools.

UseSharedSpaces is accessed by SA in src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java. I would suggest adding this:

  public boolean isSharingEnabled() {
    if (sharingEnabled == null) {
<<<<<
      Boolean sharingConfigured = getSharingConfigured(); // with similar "lookup" logic as below ...
      if (!sharingConfigured.booleanValue()) {
        sharingEnabled = sharingConfigured; // INCLUDE_CDS is disabled
        return false;
      }
>>>>>
       Address address = VM.getVM().getDebugger().lookup(null, "UseSharedSpaces");
        if (address == null && getOS().equals("win32")) {
            // On Win32 symbols are prefixed with the dll name. So look for
            // UseSharedSpaces as a symbol in jvm.dll.
            address = VM.getVM().getDebugger().lookup(null, "jvm!UseSharedSpaces");
        }
        sharingEnabled = address.getJBooleanAt(0);
    }
    return sharingEnabled.booleanValue();
  }

Then we can change globalDefinitions.cpp to something like:

#if INCLUDE_CDS
// Old CDS options
bool DumpSharedSpaces;
bool DynamicDumpSharedSpaces;
bool RequireSharedSpaces;
extern "C" {
JNIEXPORT jboolean UseSharedSpaces = true; // for SA
JNIEXPORT jboolean SharingConfigured= true; // for SA
}
#else
extern "C" {
JNIEXPORT jboolean SharingConfigured= false; // for SA
}
#endif

You may need to test with a build that has SA enabled but CDS disabled. I am not sure if this is a supported combination.

extern "C" {
// Make sure UseSharedSpaces is accessible to the serviceability agent.
extern JNIEXPORT jboolean UseSharedSpaces;
}
#else
// in non CDS mode do not export it
extern const bool UseSharedSpaces;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about this?

const bool RequireSharedSpaces = false;

This will allow the C++ compiler to eliminate all code that depend on this value when INCLUDE_CDS is false.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Ioi, I set this already some lines above (in the non-INCLUDE_CDS case).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to remove the extern keyword, and add the definition of = false in globalDefinitions.hpp.

Then, the corresponding definition should be removed from globalDefinitions.cpp.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Ioi, I adjusted the *SharedSpaces in globalDefinitions.cpp / globalDefinitions.hpp .

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am on vacation now so I won’t be able to follow up with the review. Please feel free to integrate after you get enough reviews.

Just a general comment. For blocks that are enclosed with “if (UseSharedSpace) {…}”, there’s no need to put them inside #if as these blocks will be elided by the C++ compiler. That way the code will be less messy.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Ioi, thanks for the feedback. Mostly you are correct, the #if blocks are not needed any more at most places. Should I remove them at least from my patch now or keep them? But I think there are a few exceptions - at some places the coding attempts to set the *SharedSpaces flags and this does not compile any more after switching to const. So there the #if blocks have to stay.

Comment on lines +1458 to +1460
#if INCLUDE_CDS
UseSharedSpaces = false;
#endif
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't make sense - the entire no_shared_spaces method is only meaningful on a JVM with CDS. Otherwise -Xshare:on should immediately be rejected. ??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi David, unfortunately this has to stay for now, otherwise we would try to set a const in the CDS-disabled build, this does not compile.
Maybe it would make sense to guard the whole function no_shared_spaces and adjust the calls/usages but I would prefer a separate issue for this.

Copy link
Member

@dholmes-ora dholmes-ora Mar 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AFAICS all calls to no_shared_spaces are already within INCLUDE_CDS regions so the function itself can also be INCLUDE_CDS only.

Comment on lines 2657 to 2675
} else if (match_option(option, "-Xshare:dump")) {
#if INCLUDE_CDS
DumpSharedSpaces = true;
#endif
// -Xshare:on
} else if (match_option(option, "-Xshare:on")) {
#if INCLUDE_CDS
UseSharedSpaces = true;
RequireSharedSpaces = true;
#endif
// -Xshare:auto || -XX:ArchiveClassesAtExit=<archive file>
} else if (match_option(option, "-Xshare:auto")) {
#if INCLUDE_CDS
UseSharedSpaces = true;
RequireSharedSpaces = false;
#endif
xshare_auto_cmd_line = true;
// -Xshare:off
} else if (match_option(option, "-Xshare:off")) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These flags should all immediately be rejected if used in a non-CDS build. Yes this is pre-existing but it now looks totally broken with the new changes. There should be something like:

#ifndef INCLUDE_CDS
} else if (match_option(option, "-Xshare")) {  // or whatever we need to match the prefix only
  warning("Option %s is not supported in this VM", option);
#else 
// process flags as usual
#endif

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi David, I adjusted the coding following your request (however we need to use #if not #ifndef here).

@MBaesken
Copy link
Member Author

MBaesken commented Mar 7, 2023

Unfortunately with the latest revision of the patch, quite a few tests fail when the build is configured with --disable-cds .
Seems those tests set various -Xshare options for some reason, especially -Xshare:off .

Failing tests (there might be a few more where the reason is not fully clear from the log)
jdk/jfr/event/runtime/TestMetaspaceAllocationFailure.java
Unrecognized option: -Xshare:off

sun/security/provider/X509Factory/BigCRL.java
Unrecognized option: -Xshare:off

java/lang/module/ModuleDescriptorHashCodeTest.java
Unrecognized option: -Xshare:off

java/math/BigInteger/largeMemory/DivisionOverflow.java
Unrecognized option: -Xshare:off

java/math/BigInteger/largeMemory/StringConstructorOverflow.java
Unrecognized option: -Xshare:off

runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java#id7
stderr content[Unrecognized option: -Xshare:dump

runtime/7158988/FieldMonitor.java
JavaTest Message: Test threw exception: java.lang.Error: Target VM failed to initialize: VM initialization failed for:
/jvm_21/bin/java -Xshare:off -Xlog:gc -Xdebug -Xrunjdwp:transport=dt_socket,address=localhost:45665,suspend=y,includevirtualthreads=n TestPostFieldModification
JavaTest Message: shutting down test

runtime/verifier/TraceClassRes.java
stderr: [Unrecognized option: -Xshare:off

compiler/intrinsics/klass/TestIsPrimitive.java
Unrecognized option: -Xshare:off

runtime/logging/ModulesTest.java
stderr: [Unrecognized option: -Xshare:off

runtime/CompressedOops/CompressedClassPointers.java
stderr: [Unrecognized option: -Xshare:off

So should we better keep the handling of -Xshare:<sub-option> as it is when cds is disabled ?

@iklam
Copy link
Member

iklam commented Mar 8, 2023

Maybe we can keep the -Xshare flags and make their behavior consistent with builds that have CDS enabled:

-Xshare:off - do nothing
-Xshare:auto - do nothing (CDS cannot be used so it’s “automatically” disabled)
-Xshare:on - fail and report that CDS archive cannot be loaded.

@dholmes-ora
Copy link
Member

Unfortunately with the latest revision of the patch, quite a few tests fail when the build is configured with --disable-cds .

Yes that is to be expected. The tests have not be written to allow them to be run for arbitrary selection of the INCLUDE_XXX features. You will also have to exclude running all the CDS tests on such a build. Arguably any tests that set the -Xshare flag depend on CDS (positvely or negatively) and so should use appropriate @requires or runtime checks before using the flag.

Maybe we can keep the -Xshare flags and make their behavior consistent with builds that have CDS enabled

This might help the tests but semantically this just seems wrong to me. It would be like accepting G1 flags when you only have SerialGC available.

I think we are just demonstrating that fully conditionalizing CDS code requires some higher-level semantic issues to be dealt with and that it is probably not worth trying to do that. So that brings us back to whether it is worth even trying to make a small step from where we are towards more complete conditionalization? Seems an arbitrary line to set to me when the benefit is minimal. But if you want to revert to an earlier version of the patch that "works" then I won't object further.

@MBaesken
Copy link
Member Author

MBaesken commented Mar 8, 2023

The disabling/enabling of jvm features is briefly mentioned in the build doc ( https://openjdk.org/groups/build/doc/building.html ) so I thought this is something that is supported and should work (maybe not perfect because of limited testing) . If it is really not so interesting to others to adjust tests with @requires vm.cds where needed and to remove not needed code when the feature is disabled , then we can leave it as it is.

@MBaesken
Copy link
Member Author

I noticed that the Xshare-handling IS already an issue on AIX - there cds is not supported and -Xshare:off does not work.
So tests like the ones I mentioned in my list above e.g.

java/math/BigInteger/largeMemory/DivisionOverflow.java

all fail on AIX (like on other platforms without cds).

@iklam
Copy link
Member

iklam commented Mar 29, 2023

Maybe we can keep the -Xshare flags and make their behavior consistent with builds that have CDS enabled

This might help the tests but semantically this just seems wrong to me. It would be like accepting G1 flags when you only have SerialGC available.

The following is the current behavior when -Xshare is used when CDS is disabled. If we want to remove -Xshare completely, a CSR will be needed.

$ minimal/bin/java -Xshare:on -version
Shared spaces are not supported in this VM
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

$ minimal/bin/java -Xshare:auto -version
Java HotSpot(TM) 64-Bit Minimal VM warning: Shared spaces are not supported in this VM
java version "21-internal" 2023-09-19
Java(TM) SE Runtime Environment (fastdebug build 21-internal-adhoc.iklam.nep)
Java HotSpot(TM) 64-Bit Minimal VM (fastdebug build 21-internal-adhoc.iklam.nep, mixed mode, emulated-client)

$ minimal/bin/java -Xshare:off -version
java version "21-internal" 2023-09-19
Java(TM) SE Runtime Environment (fastdebug build 21-internal-adhoc.iklam.nep)
Java HotSpot(TM) 64-Bit Minimal VM (fastdebug build 21-internal-adhoc.iklam.nep, mixed mode, emulated-client)

@MBaesken
Copy link
Member Author

So considering the low interest in adding the if INCLUDE_CDS checks in the codebase, there is still the fact that @requires vm.cds is missing in quite a few tests (see the list above). So what you think about closing this PR and instead fixing the missing required comments (probably in a separate issue) ?

@dholmes-ora
Copy link
Member

I'm a bit confused about the testing situation as you indicated -Xshare:off causes an error on AIX without CDS, yet Ioi showed it doesn't cause an error when used with the MinimalVM which also doesn't have CDS. I think Ioi's earlier suggestion regarding handling of the different -Xshare: flags is worth looking at from the testing perspective (only on should cause an error on systems without CDS). But that would be a separate issue. Thanks.

@bridgekeeper
Copy link

bridgekeeper bot commented May 15, 2023

@MBaesken This pull request has been inactive for more than 4 weeks and will be automatically closed if another 4 weeks passes without any activity. To avoid this, simply add a new comment to the pull request. Feel free to ask for assistance if you need help with progressing this pull request towards integration!

@bridgekeeper
Copy link

bridgekeeper bot commented Jun 12, 2023

@MBaesken This pull request has been inactive for more than 8 weeks and will now be automatically closed. If you would like to continue working on this pull request in the future, feel free to reopen it! This can be done using the /open pull request command.

@bridgekeeper bridgekeeper bot closed this Jun 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
hotspot hotspot-dev@openjdk.org ready Pull request is ready to be integrated rfr Pull request is ready for review
4 participants