Why does "jobject" on interpreter stack point to wield locations?
Colin(Du Li)
dawn2004 at gmail.com
Mon Apr 13 21:21:49 PDT 2009
Hello.
I'm playing with stack of c++ interpreter. I have some questions about the
object reference on the stack.
Let's look at the following example:
When interpreter invoke("invokespecial") method "virtual jobject
java.lang.ClassLoader.loadClass(jobject)", I print out stack frame (last
frame), and the result is as follows:
- local [0x7e747b90] ; #0
- local [0x7e7489d0] ; #1
- stack [0x7e7489d0] ; #1
- stack [0x7e747b90] ; #0
[ - obj
a 'sun/misc/Launcher$AppClassLoader'
- lock
monitor
- monitor[0xbff3f8c8]
- bcp [0xb3f3fa4e] ; @2
- locals [0xbff3f944]
- method [0xb3f3fa78] ; virtual jobject
java.lang.ClassLoader.loadClassInternal(jobject)
According to the jvm specification, stack slot #0 should contain the
"receiver", and stack slot to the parameter of method "loadclass(jobject)".
I use JNIHandles::resolve(obj) to resolve the two jobjects on the above
stack slot. The result of slot #0 is a reference pointing to another slot of
the current stack. The result of slot #1 is a invalid address, "0x1".
The results confuse me. I assumed both of them pointed to some object is
heap.
Could you give me some explanation for this question?
I really need your help.
Thanks a lot!
Colin.
--
View this message in context: http://www.nabble.com/Why-does-%22jobject%22-on-interpreter-stack-point-to-wield-locations--tp23033048p23033048.html
Sent from the OpenJDK Hotspot Virtual Machine mailing list archive at Nabble.com.
More information about the hotspot-dev
mailing list