NoClassDef error when trying to preload additional class in systemDirectory::initialize_preloaded_classes()

Xiaoran Wang xiaoran at x1a0ran.com
Tue Jun 11 14:06:13 PDT 2013


I'm building openjdk 7u6 with ALT_BOOTDIR set to jdk7u21 downloaded from
java.com, but it still gave me weird build errors. So I removed all my
changes, and only added one symbol to vmSymbol.hpp, and then it gave me an
error again.

added line:vmSymbol.hpp
template(foo_bar,                        "foo/bar")                       \

cd linux_amd64_compiler2/product && ./test_gamma
Using java runtime at: /usr/lib/jvm/jdk1.7.0_21/jre
Error occurred during initialization of VM
java.lang.InternalError
    at sun.misc.Launcher.getFileURL(Launcher.java:463)
    at sun.misc.Launcher$ExtClassLoader.getExtURLs(Launcher.java:192)
    at sun.misc.Launcher$ExtClassLoader.<init>(Launcher.java:164)
    at sun.misc.Launcher$ExtClassLoader$1.run(Launcher.java:148)
    at sun.misc.Launcher$ExtClassLoader$1.run(Launcher.java:142)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.Launcher$ExtClassLoader.getExtClassLoader(Launcher.java:141)
    at sun.misc.Launcher.<init>(Launcher.java:71)
    at sun.misc.Launcher.<clinit>(Launcher.java:57)
    at java.lang.ClassLoader.initSystemClassLoader(ClassLoader.java:1486)
    at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1468)

So where seems to be the problem?




On Mon, Jun 10, 2013 at 11:09 PM, David Holmes <david.holmes at oracle.com>wrote:

> What version of hotspot are you building? If it is current sources then
> you will need a JDK7 import JDK or even JDK8. You can't take current
> hotspot and place into a 6u JDK for example.
>
> David
>
>
> On 9/06/2013 6:06 AM, Xiaoran Wang wrote:
>
>> To followup, I tried to put foo/bar.class into $JAVA_HOME/jre/classes, now
>> the linux_amd64_compiler2/product/**test_gamma passed without error, but
>> another error occured from linux_amd64_compiler2/jvmg/**test_gamma,
>> which is
>> even more confusing.
>>
>> cd linux_amd64_compiler2/jvmg && ./test_gamma
>> java full version "1.6.0_22-b04"
>> Using java runtime at: /home/Documents/tools/hotspot-**
>> working-dir/java/jre
>> Error occurred during initialization of VM
>> java.lang.**NoSuchMethodException: java.lang.reflect.Method.**invoke
>>
>>
>> Can someone shed some light please?
>>
>>
>> On Sat, Jun 8, 2013 at 12:32 PM, Xiaoran Wang <xiaoran at x1a0ran.com>
>> wrote:
>>
>>  Hi all,
>>>
>>> I'm instrumenting the hotspot JVM for research purposes and one of the
>>> steps is to preload some classes during JVM startup time so that I can
>>> use
>>> its KlassOop/KlassHandle later in the template Interpreter.
>>>
>>> I appended the new classes I wanted to load in systemDirectory.hpp, e.g.
>>>   *template(bar_klass,                foo_bar,             Pre) \*
>>>
>>> And its corresponding symbol in vmSymbols.hpp
>>> *template(foo_bar, "foo/bar")\*
>>>
>>>
>>> Then I put foo/bar.class into the corresponding rt.jar that will be used
>>> to build libjvm.so.
>>>
>>> However, when I built it, the "gamma" test always gives me an
>>> NoClassDefFoundError.
>>>
>>> cd linux_amd64_compiler2/product && ./test_gamma
>>> java full version "1.6.0_22-b04"
>>> Using java runtime at: /home/Documents/tools/hotspot-**
>>> working-dir/java/jre
>>> Error occurred during initialization of VM
>>> java/lang/**NoClassDefFoundError: foo/bar
>>>
>>>
>>> So my question is where should I put my custom class so that it can be
>>> preloaded during JVM startup in
>>> systemDirectory::initialize_**preloaded_classes?
>>>
>>> btw, I verified the rt.jar is the one JVM is loading because I tried to
>>> remove java/lang/Object from it and it complained about missing that
>>> class
>>> as well.
>>>
>>> Thank you
>>> Xiaoran
>>>
>>>


More information about the hotspot-dev mailing list