src/share/vm/code/codeCache.hpp

Print this page




 117 
 118   // Iteration
 119   static CodeBlob* first();
 120   static CodeBlob* next (CodeBlob* cb);
 121   static CodeBlob* alive(CodeBlob *cb);
 122   static nmethod* alive_nmethod(CodeBlob *cb);
 123   static nmethod* first_nmethod();
 124   static nmethod* next_nmethod (CodeBlob* cb);
 125   static int       nof_blobs()                 { return _number_of_blobs; }
 126   static int       nof_adapters()              { return _number_of_adapters; }
 127   static int       nof_nmethods()              { return _number_of_nmethods; }
 128 
 129   // GC support
 130   static void gc_epilogue();
 131   static void gc_prologue();
 132   static void verify_oops();
 133   // If "unloading_occurred" is true, then unloads (i.e., breaks root links
 134   // to) any unmarked codeBlobs in the cache.  Sets "marked_for_unloading"
 135   // to "true" iff some code got unloaded.
 136   static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);
 137   static void oops_do(OopClosure* f) {
 138     CodeBlobToOopClosure oopc(f, /*do_marking=*/ false);
 139     blobs_do(&oopc);
 140   }
 141   static void asserted_non_scavengable_nmethods_do(CodeBlobClosure* f = NULL) PRODUCT_RETURN;
 142   static void scavenge_root_nmethods_do(CodeBlobClosure* f);
 143 
 144   static nmethod* scavenge_root_nmethods()          { return _scavenge_root_nmethods; }
 145   static void set_scavenge_root_nmethods(nmethod* nm) { _scavenge_root_nmethods = nm; }
 146   static void add_scavenge_root_nmethod(nmethod* nm);
 147   static void drop_scavenge_root_nmethod(nmethod* nm);
 148   static void prune_scavenge_root_nmethods();
 149 
 150   // Printing/debugging
 151   static void print();                           // prints summary
 152   static void print_internals();
 153   static void print_memory_overhead();
 154   static void verify();                          // verifies the code cache
 155   static void print_trace(const char* event, CodeBlob* cb, int size = 0) PRODUCT_RETURN;
 156   static void print_summary(outputStream* st, bool detailed = true); // Prints a summary of the code cache usage
 157   static void log_state(outputStream* st);
 158 
 159   // The full limits of the codeCache
 160   static address  low_bound()                    { return (address) _heap->low_boundary(); }
 161   static address  high_bound()                   { return (address) _heap->high_boundary(); }
 162   static address  high()                         { return (address) _heap->high(); }
 163 
 164   // Profiling
 165   static address first_address();                // first address used for CodeBlobs
 166   static address last_address();                 // last  address used for CodeBlobs
 167   static size_t  capacity()                      { return _heap->capacity(); }
 168   static size_t  max_capacity()                  { return _heap->max_capacity(); }
 169   static size_t  unallocated_capacity()          { return _heap->unallocated_capacity(); }
 170   static double  reverse_free_ratio();
 171 
 172   static bool needs_cache_clean()                { return _needs_cache_clean; }
 173   static void set_needs_cache_clean(bool v)      { _needs_cache_clean = v;    }
 174   static void clear_inline_caches();             // clear all inline caches



 175 
 176   // Deoptimization
 177   static int  mark_for_deoptimization(DepChange& changes);
 178 #ifdef HOTSWAP
 179   static int  mark_for_evol_deoptimization(instanceKlassHandle dependee);
 180 #endif // HOTSWAP
 181 
 182   static void mark_all_nmethods_for_deoptimization();
 183   static int  mark_for_deoptimization(Method* dependee);
 184   static void make_marked_nmethods_zombies();
 185   static void make_marked_nmethods_not_entrant();
 186 
 187     // tells how many nmethods have dependencies
 188   static int number_of_nmethods_with_dependencies();
 189 
 190   static int get_codemem_full_count() { return _codemem_full_count; }
 191 };
 192 
 193 #endif // SHARE_VM_CODE_CODECACHE_HPP


 117 
 118   // Iteration
 119   static CodeBlob* first();
 120   static CodeBlob* next (CodeBlob* cb);
 121   static CodeBlob* alive(CodeBlob *cb);
 122   static nmethod* alive_nmethod(CodeBlob *cb);
 123   static nmethod* first_nmethod();
 124   static nmethod* next_nmethod (CodeBlob* cb);
 125   static int       nof_blobs()                 { return _number_of_blobs; }
 126   static int       nof_adapters()              { return _number_of_adapters; }
 127   static int       nof_nmethods()              { return _number_of_nmethods; }
 128 
 129   // GC support
 130   static void gc_epilogue();
 131   static void gc_prologue();
 132   static void verify_oops();
 133   // If "unloading_occurred" is true, then unloads (i.e., breaks root links
 134   // to) any unmarked codeBlobs in the cache.  Sets "marked_for_unloading"
 135   // to "true" iff some code got unloaded.
 136   static void do_unloading(BoolObjectClosure* is_alive, bool unloading_occurred);




 137   static void asserted_non_scavengable_nmethods_do(CodeBlobClosure* f = NULL) PRODUCT_RETURN;
 138   static void scavenge_root_nmethods_do(CodeBlobClosure* f);
 139 
 140   static nmethod* scavenge_root_nmethods()          { return _scavenge_root_nmethods; }
 141   static void set_scavenge_root_nmethods(nmethod* nm) { _scavenge_root_nmethods = nm; }
 142   static void add_scavenge_root_nmethod(nmethod* nm);
 143   static void drop_scavenge_root_nmethod(nmethod* nm);
 144   static void prune_scavenge_root_nmethods();
 145 
 146   // Printing/debugging
 147   static void print();                           // prints summary
 148   static void print_internals();
 149   static void print_memory_overhead();
 150   static void verify();                          // verifies the code cache
 151   static void print_trace(const char* event, CodeBlob* cb, int size = 0) PRODUCT_RETURN;
 152   static void print_summary(outputStream* st, bool detailed = true); // Prints a summary of the code cache usage
 153   static void log_state(outputStream* st);
 154 
 155   // The full limits of the codeCache
 156   static address  low_bound()                    { return (address) _heap->low_boundary(); }
 157   static address  high_bound()                   { return (address) _heap->high_boundary(); }
 158   static address  high()                         { return (address) _heap->high(); }
 159 
 160   // Profiling
 161   static address first_address();                // first address used for CodeBlobs
 162   static address last_address();                 // last  address used for CodeBlobs
 163   static size_t  capacity()                      { return _heap->capacity(); }
 164   static size_t  max_capacity()                  { return _heap->max_capacity(); }
 165   static size_t  unallocated_capacity()          { return _heap->unallocated_capacity(); }
 166   static double  reverse_free_ratio();
 167 
 168   static bool needs_cache_clean()                { return _needs_cache_clean; }
 169   static void set_needs_cache_clean(bool v)      { _needs_cache_clean = v;    }
 170   static void clear_inline_caches();             // clear all inline caches
 171 
 172   static void verify_clean_inline_caches();
 173   static void verify_icholder_relocations();
 174 
 175   // Deoptimization
 176   static int  mark_for_deoptimization(DepChange& changes);
 177 #ifdef HOTSWAP
 178   static int  mark_for_evol_deoptimization(instanceKlassHandle dependee);
 179 #endif // HOTSWAP
 180 
 181   static void mark_all_nmethods_for_deoptimization();
 182   static int  mark_for_deoptimization(Method* dependee);
 183   static void make_marked_nmethods_zombies();
 184   static void make_marked_nmethods_not_entrant();
 185 
 186     // tells how many nmethods have dependencies
 187   static int number_of_nmethods_with_dependencies();
 188 
 189   static int get_codemem_full_count() { return _codemem_full_count; }
 190 };
 191 
 192 #endif // SHARE_VM_CODE_CODECACHE_HPP