Using InterpreterOopMap

steve goldman Steve.Goldman at Sun.COM
Tue Dec 4 06:40:37 PST 2007


Peter Helfer wrote:
> Ok, right now I'm seeing some progress in my project, so I want to be able
> to go through the Oops in a interpreter frame, using InterpreterOopMap and
> my own closure (which essentially should duplicate the existing object and
> replace the original at that position)
> 
> I copied the code over from frame.cpp / oops_interpreted_do , and here is my
> question:
> 
> Which oops does the iterate_oop touch ?
> I assume at least the expression stack, locals, but what about the other

expression stack and locals.

> fields in the interpreter frame, like methodOop, methodData, cpCacheOop ?

All of the oops in an interpreter frame that are known up front like 
methodOop, etc. are  handled by the code like:

  f->do_oop((oop*)interpreter_frame_method_addr());

the oopmap is only used to find oops that are dependent on the 
particular bci.


> What would happen if nullified these fields before, does the iterator go
> through anyway, or does it do a null check, i.e. can I assume that all
> OopClosure.do_oop(oop* p) calls are given a valid oop p, pointing to a valid
> oop ?

NULLs are valid oops. p is a pointer to an oop, not an oop, so it should 
never be NULL though what it points to could well be NULL.


-- 
Steve



More information about the hotspot-runtime-dev mailing list