comparison src/share/vm/runtime/frame.hpp @ 7179:d0aa87f04bd5

8003720: NPG: Method in interpreter stack frame can be deallocated Summary: Pass down a closure during root scanning to keep the class of the method alive. Reviewed-by: coleenp, jcoomes
author stefank
date Tue, 27 Nov 2012 10:13:20 +0100
parents da91efe96a93
children d2f8c38e543d
comparison
equal deleted inserted replaced
7178:19c1bd641922 7179:d0aa87f04bd5
411 // Conversion from an VMReg to physical stack location 411 // Conversion from an VMReg to physical stack location
412 oop* oopmapreg_to_location(VMReg reg, const RegisterMap* regmap) const; 412 oop* oopmapreg_to_location(VMReg reg, const RegisterMap* regmap) const;
413 413
414 // Oops-do's 414 // Oops-do's
415 void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f); 415 void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f);
416 void oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache = true); 416 void oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, const RegisterMap* map, bool query_oop_map_cache = true);
417 417
418 private: 418 private:
419 void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f); 419 void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f);
420 420
421 // Iteration of oops 421 // Iteration of oops
422 void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache); 422 void oops_do_internal(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache);
423 void oops_entry_do(OopClosure* f, const RegisterMap* map); 423 void oops_entry_do(OopClosure* f, const RegisterMap* map);
424 void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map); 424 void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map);
425 int adjust_offset(Method* method, int index); // helper for above fn 425 int adjust_offset(Method* method, int index); // helper for above fn
426 public: 426 public:
427 // Memory management 427 // Memory management
428 void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); } 428 void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cld_f, cf, map, true); }
429 void nmethods_do(CodeBlobClosure* cf); 429 void nmethods_do(CodeBlobClosure* cf);
430 430
431 // RedefineClasses support for finding live interpreted methods on the stack 431 // RedefineClasses support for finding live interpreted methods on the stack
432 void metadata_do(void f(Metadata*)); 432 void metadata_do(void f(Metadata*));
433 433