hg: valhalla/valhalla: Initial prototype of Lookup::defineClass to define a dynamic nestmate.
Mandy Chung
mandy.chung at oracle.com
Fri Oct 26 15:20:33 UTC 2018
Thanks. We'll look into it.
Mandy
On 10/26/18 3:03 AM, forax at univ-mlv.fr wrote:
> Hi Mandy, Lois and David,
> I see a failure but the way to reproduce the issue is not simple.
>
> Exception java.lang.NoClassDefFoundError:
> org/junit/platform/launcher/core/ServiceLoaderTestEngineRegistry$$Lambda$737
> at ClassLoader.defineClass0 (Native Method)
> at System$2.defineClass (System.java:2173)
> at MethodHandles$Lookup.defineClassWithNoCheck
> (MethodHandles.java:1271)
> at MethodHandles$Lookup.defineClassWithNoCheck
> (MethodHandles.java:1224)
> at InnerClassLambdaMetafactory.spinInnerClass
> (InnerClassLambdaMetafactory.java:324)
> at InnerClassLambdaMetafactory.buildCallSite
> (InnerClassLambdaMetafactory.java:190)
> at LambdaMetafactory.metafactory (LambdaMetafactory.java:329)
> at BootstrapMethodInvoker.invoke (BootstrapMethodInvoker.java:127)
> at CallSite.makeSite (CallSite.java:307)
> at MethodHandleNatives.linkCallSiteImpl
> (MethodHandleNatives.java:267)
> at MethodHandleNatives.linkCallSite (MethodHandleNatives.java:257)
> at ServiceLoaderTestEngineRegistry.loadTestEngines
> (ServiceLoaderTestEngineRegistry.java:37)
> at LauncherFactory.create (LauncherFactory.java:87)
> at LauncherFactory.create (LauncherFactory.java:67)
> at TesterRunner.launchJUnitPlatform (TesterRunner.java:65)
> at TesterRunner.getAsInt (TesterRunner.java:29)
> at FutureTask.run (FutureTask.java:264)
> at ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
> at ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
> at Thread.run (Thread.java:835)
> Caused by: java.lang.ClassNotFoundException:
> org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry$$Lambda$737
> at Loader.loadClass (Loader.java:566)
> at ClassLoader.loadClass (ClassLoader.java:521)
> ...
>
>
> the steps to reproduce:
> mkdir test
> cd test
> git clone git at github.com:forax/pro.git
> <mailto:git at github.com:forax/pro.git>
> cd pro
> export JAVA_HOME= ... point to jdk built with nestmates branch
> sh build.sh
> cd ..
> ./pro/target/pro/bin/pro scaffold
> enter foo
> ./pro/target/pro/bin/pro
>
> and it crashes when trying to run the JUnit test in the laucher
> factory of JUnit.
>
> the context: pro is a build tool like maven or gradle, it uses jlink
> to build itself and embed the modules of the jdk so pro uses its own
> jdk (which allows to have reproducible build because there is no
> dependency to an external jdk), pro scaffold creates a module (here
> named foo) with a defaut Main and a default test. When you run pro, it
> will run the file build.pro with jshell, resolve all the dependencies
> by downloading them from Maven central, run the test using JUnit5.
>
> Rémi
>
> ------------------------------------------------------------------------
>
> *De: *"mandy chung" <mandy.chung at oracle.com>
> *À: *"Remi Forax" <forax at univ-mlv.fr>
> *Cc: *"valhalla-dev" <valhalla-dev at openjdk.java.net>
> *Envoyé: *Mardi 23 Octobre 2018 23:44:43
> *Objet: *Re: hg: valhalla/valhalla: Initial prototype of
> Lookup::defineClass to define a dynamic nestmate.
>
> That's great.
>
> There is a couple of known issues that Lois is working on
> w.r.t. hiding a strong hidden class and classdata. I pushed
> this with a few test failures as this will make it easier
> for Lois and David to continue the development.
>
> Mandy
>
> On 10/23/18 1:28 PM, Remi Forax wrote:
>
> I'm currently building that branch :)
>
> Rémi
>
> ----- Mail original -----
>
> De: "mandy chung"<mandy.chung at oracle.com>
> À: "valhalla-dev"<valhalla-dev at openjdk.java.net>
> Envoyé: Mardi 23 Octobre 2018 22:06:27
> Objet: hg: valhalla/valhalla: Initial prototype of Lookup::defineClass to define a dynamic nestmate.
>
> Changeset: 55aafa38f559
> Author: mchung
> Date: 2018-10-23 13:05 -0700
> URL:http://hg.openjdk.java.net/valhalla/valhalla/rev/55aafa38f559
>
> Initial prototype of Lookup::defineClass to define a dynamic nestmate.
> javac is updated not to generate the bridge method for lambda.
> Also experiment to replace the use of Unsafe VM anonmyous class
> and constant pool patching. Unsafe::defineAnonymousClass supports
> the following properties:
>
> 1. Hidden / non-findable / unregister class
> The class is not registered in the system dictionary
> Should a non-findable class forbid any reference to this_class?
>
> 2. Weak class
> The class has a different life cycle as its defining class loader.
> i.e. it may be reclaimed when the class loader is alive
>
> 3. Access to VM annotations
> VM annotations are internal.
>
> 4. Live constants
> Explore the class data idea to replace the constant pool patching
> mechanism.
>
> ! make/hotspot/symbols/symbols-unix
> ! src/hotspot/share/aot/aotCodeHeap.cpp
> ! src/hotspot/share/aot/aotLoader.cpp
> ! src/hotspot/share/ci/ciField.cpp
> ! src/hotspot/share/ci/ciInstanceKlass.cpp
> ! src/hotspot/share/ci/ciInstanceKlass.hpp
> ! src/hotspot/share/classfile/classFileParser.cpp
> ! src/hotspot/share/classfile/classFileParser.hpp
> ! src/hotspot/share/classfile/classLoader.cpp
> ! src/hotspot/share/classfile/classLoaderData.cpp
> ! src/hotspot/share/classfile/classLoaderData.hpp
> ! src/hotspot/share/classfile/classLoaderDataGraph.cpp
> ! src/hotspot/share/classfile/classLoaderDataGraph.hpp
> ! src/hotspot/share/classfile/classLoaderExt.cpp
> ! src/hotspot/share/classfile/classLoaderHierarchyDCmd.cpp
> ! src/hotspot/share/classfile/classLoaderStats.cpp
> ! src/hotspot/share/classfile/defaultMethods.cpp
> ! src/hotspot/share/classfile/javaClasses.hpp
> ! src/hotspot/share/classfile/klassFactory.cpp
> ! src/hotspot/share/classfile/klassFactory.hpp
> ! src/hotspot/share/classfile/moduleEntry.hpp
> ! src/hotspot/share/classfile/systemDictionary.cpp
> ! src/hotspot/share/classfile/systemDictionary.hpp
> ! src/hotspot/share/classfile/systemDictionaryShared.cpp
> ! src/hotspot/share/include/jvm.h
> ! src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp
> ! src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp
> ! src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.cpp
> ! src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp
> ! src/hotspot/share/jvmci/vmStructs_jvmci.cpp
> ! src/hotspot/share/memory/metaspace.cpp
> ! src/hotspot/share/memory/metaspace.hpp
> ! src/hotspot/share/memory/metaspace/printCLDMetaspaceInfoClosure.cpp
> ! src/hotspot/share/memory/metaspace/spaceManager.cpp
> ! src/hotspot/share/memory/metaspaceShared.cpp
> ! src/hotspot/share/memory/metaspaceTracer.cpp
> ! src/hotspot/share/oops/instanceKlass.cpp
> ! src/hotspot/share/oops/instanceKlass.hpp
> ! src/hotspot/share/oops/instanceMirrorKlass.inline.hpp
> ! src/hotspot/share/prims/jvm.cpp
> ! src/hotspot/share/prims/jvmtiRedefineClasses.cpp
> ! src/hotspot/share/prims/methodHandles.cpp
> ! src/hotspot/share/prims/unsafe.cpp
> ! src/hotspot/share/runtime/reflection.cpp
> ! src/hotspot/share/runtime/vmStructs.cpp
> ! src/java.base/share/classes/java/lang/Class.java
> ! src/java.base/share/classes/java/lang/ClassLoader.java
> ! src/java.base/share/classes/java/lang/System.java
> ! src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java
> ! src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java
> ! src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
> ! src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java
> ! src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java
> ! src/java.base/share/classes/java/lang/invoke/MethodHandles.java
> ! src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java
> ! src/java.base/share/classes/jdk/internal/misc/JavaLangAccess.java
> ! src/java.base/share/native/libjava/ClassLoader.c
> ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
> ! test/hotspot/gtest/memory/test_metaspace_allocation.cpp
> + test/jdk/java/lang/invoke/defineClass/DefineClassTest.java
> + test/jdk/java/lang/invoke/defineClass/DefineClassWithClassData.java
>
>
>
More information about the valhalla-dev
mailing list