// // nmethodBucket is used to record dependent nmethods for // deoptimization. nmethod dependencies are actually <klass, method> // pairs but we really only care about the klass part for purposes of // finding nmethods which might need to be deoptimized. Instead of // recording the method, a count of how many times a particular nmethod // was recorded is kept. This ensures that any recording errors are // noticed since an nmethod should be removed as many times are it's // added. // class nmethodBucket: public CHeapObj<mtClass> { friendclass VMStructs; private:
nmethod* _nmethod; volatileint _count;
nmethodBucket* volatile _next;
nmethodBucket* volatile _purge_list_next;
// // Utility class to manipulate nmethod dependency context. // Dependency context can be attached either to an InstanceKlass (_dep_context field) // or CallSiteContext oop for call_site_target dependencies (see javaClasses.hpp). // DependencyContext class operates on some location which holds a nmethodBucket* value // and uint64_t integer recording the safepoint counter at the last cleanup. // class DependencyContext : public StackObj { friendclass VMStructs; friendclass TestDependencyContext; private:
nmethodBucket* volatile* _dependency_context_addr; volatile uint64_t* _last_cleanup_addr;
public: #ifdef ASSERT // Safepoints are forbidden during DC lifetime. GC can invalidate // _dependency_context_addr if it relocates the holder // (e.g. CallSiteContext Java object).
SafepointStateTracker _safepoint_tracker;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.