< prev index next >


Print this page
@@ -74,10 +74,11 @@
  class ExceptionCache;
  class KlassDepChange;
  class OopClosure;
  class ShenandoahParallelCodeHeapIterator;
+ class NativePostCallNop;
  class CodeCache : AllStatic {
    friend class VMStructs;
    friend class JVMCIVMStructs;
    template <class T, class Filter> friend class CodeBlobIterator;

@@ -93,10 +94,11 @@
    static address _low_bound;                            // Lower bound of CodeHeap addresses
    static address _high_bound;                           // Upper bound of CodeHeap addresses
    static int _number_of_nmethods_with_dependencies;     // Total number of nmethods with dependencies
    static uint8_t _unloading_cycle;                      // Global state for recognizing old nmethods that need to be unloaded
+   static uint64_t _marking_cycle;
    static ExceptionCache* volatile _exception_cache_purge_list;
    // CodeHeap management
    static void initialize_heaps();                             // Initializes the CodeHeaps

@@ -120,10 +122,11 @@
    static int    allocated_segments();
    static size_t freelists_length();
    // Make private to prevent unsafe calls.  Not all CodeBlob*'s are embedded in a CodeHeap.
    static bool contains(CodeBlob *p) { fatal("don't call me!"); return false; }
+   static CodeBlob* patch_nop(NativePostCallNop* nop, void* pc, int& slot);
    // Initialization
    static void initialize();
    static size_t page_size(bool aligned = true, size_t min_pages = 1); // Returns the page size used by the CodeCache

@@ -150,10 +153,13 @@
    static void metadata_do(MetadataClosure* f);             // iterates over metadata in alive nmethods
    // Lookup
    static CodeBlob* find_blob(void* start);              // Returns the CodeBlob containing the given address
    static CodeBlob* find_blob_unsafe(void* start);       // Same as find_blob but does not fail if looking up a zombie method
+   static CodeBlob* find_blob_fast(void* start);         // Returns the CodeBlob containing the given address
+   static CodeBlob* find_blob_and_oopmap(void* start, int& slot);         // Returns the CodeBlob containing the given address
+   static int find_oopmap_slot_fast(void* start);        // Returns a fast oopmap slot if there is any; -1 otherwise
    static nmethod*  find_nmethod(void* start);           // Returns the nmethod containing the given address
    static CompiledMethod* find_compiled(void* start);
    static int       blob_count();                        // Returns the total number of CodeBlobs in the cache
    static int       blob_count(int code_blob_type);

@@ -178,10 +184,12 @@
    static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);
    static uint8_t unloading_cycle() { return _unloading_cycle; }
    static void increment_unloading_cycle();
+   static void increment_marking_cycle();
+   static uint64_t marking_cycle() { return _marking_cycle; }
    static void release_exception_cache(ExceptionCache* entry);
    static void purge_exception_caches();
    // Printing/debugging
    static void print();                           // prints summary

@@ -262,11 +270,12 @@
    static int  mark_for_deoptimization(KlassDepChange& changes);
    static void mark_all_nmethods_for_deoptimization();
    static int  mark_for_deoptimization(Method* dependee);
-   static void make_marked_nmethods_not_entrant();
+   static void make_marked_nmethods_not_entrant(GrowableArray<CompiledMethod*>* marked);
+   static void make_marked_nmethods_deoptimized(GrowableArray<CompiledMethod*>* marked);
    // Flushing and deoptimization
    static void flush_dependents_on(InstanceKlass* dependee);
    // RedefineClasses support
< prev index next >