comparison src/share/vm/code/nmethod.hpp @ 3377:2aa9ddbb9e60

7041789: 30% perf regression with c2/arm following 7017732 Summary: Implement a more accurate is_scavengable() Reviewed-by: stefank, jcoomes, ysr
author jmasa
date Tue, 03 May 2011 10:30:34 -0700
parents 3d58a4983660
children be4ca325525a c124e2e7463e
comparison
equal deleted inserted replaced
3373:688202ef6306 3377:2aa9ddbb9e60
107 class xmlStream; 107 class xmlStream;
108 108
109 class nmethod : public CodeBlob { 109 class nmethod : public CodeBlob {
110 friend class VMStructs; 110 friend class VMStructs;
111 friend class NMethodSweeper; 111 friend class NMethodSweeper;
112 friend class CodeCache; // non-perm oops 112 friend class CodeCache; // scavengable oops
113 private: 113 private:
114 // Shared fields for all nmethod's 114 // Shared fields for all nmethod's
115 methodOop _method; 115 methodOop _method;
116 int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method 116 int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method
117 jmethodID _jmethod_id; // Cache of method()->jmethod_id() 117 jmethodID _jmethod_id; // Cache of method()->jmethod_id()
464 void verify_oop_relocations(); 464 void verify_oop_relocations();
465 465
466 bool is_at_poll_return(address pc); 466 bool is_at_poll_return(address pc);
467 bool is_at_poll_or_poll_return(address pc); 467 bool is_at_poll_or_poll_return(address pc);
468 468
469 // Non-perm oop support 469 // Scavengable oop support
470 bool on_scavenge_root_list() const { return (_scavenge_root_state & 1) != 0; } 470 bool on_scavenge_root_list() const { return (_scavenge_root_state & 1) != 0; }
471 protected: 471 protected:
472 enum { npl_on_list = 0x01, npl_marked = 0x10 }; 472 enum { sl_on_list = 0x01, sl_marked = 0x10 };
473 void set_on_scavenge_root_list() { _scavenge_root_state = npl_on_list; } 473 void set_on_scavenge_root_list() { _scavenge_root_state = sl_on_list; }
474 void clear_on_scavenge_root_list() { _scavenge_root_state = 0; } 474 void clear_on_scavenge_root_list() { _scavenge_root_state = 0; }
475 // assertion-checking and pruning logic uses the bits of _scavenge_root_state 475 // assertion-checking and pruning logic uses the bits of _scavenge_root_state
476 #ifndef PRODUCT 476 #ifndef PRODUCT
477 void set_scavenge_root_marked() { _scavenge_root_state |= npl_marked; } 477 void set_scavenge_root_marked() { _scavenge_root_state |= sl_marked; }
478 void clear_scavenge_root_marked() { _scavenge_root_state &= ~npl_marked; } 478 void clear_scavenge_root_marked() { _scavenge_root_state &= ~sl_marked; }
479 bool scavenge_root_not_marked() { return (_scavenge_root_state &~ npl_on_list) == 0; } 479 bool scavenge_root_not_marked() { return (_scavenge_root_state &~ sl_on_list) == 0; }
480 // N.B. there is no positive marked query, and we only use the not_marked query for asserts. 480 // N.B. there is no positive marked query, and we only use the not_marked query for asserts.
481 #endif //PRODUCT 481 #endif //PRODUCT
482 nmethod* scavenge_root_link() const { return _scavenge_root_link; } 482 nmethod* scavenge_root_link() const { return _scavenge_root_link; }
483 void set_scavenge_root_link(nmethod *n) { _scavenge_root_link = n; } 483 void set_scavenge_root_link(nmethod *n) { _scavenge_root_link = n; }
484 484