243 comp_level == CompLevel_simple || 244 comp_level == CompLevel_full_optimization) { 245 // Non profiled methods 246 return CodeBlobType::MethodNonProfiled; 247 } else if (comp_level == CompLevel_limited_profile || 248 comp_level == CompLevel_full_profile) { 249 // Profiled methods 250 return CodeBlobType::MethodProfiled; 251 } 252 ShouldNotReachHere(); 253 return 0; 254 } 255 256 static void verify_clean_inline_caches(); 257 static void verify_icholder_relocations(); 258 259 // Deoptimization 260 private: 261 static int mark_for_deoptimization(KlassDepChange& changes); 262 #ifdef HOTSWAP 263 static int mark_for_evol_deoptimization(instanceKlassHandle dependee); 264 #endif // HOTSWAP 265 266 public: 267 static void mark_all_nmethods_for_deoptimization(); 268 static int mark_for_deoptimization(Method* dependee); 269 static void make_marked_nmethods_not_entrant(); 270 271 // Flushing and deoptimization 272 static void flush_dependents_on(instanceKlassHandle dependee); 273 #ifdef HOTSWAP 274 // Flushing and deoptimization in case of evolution 275 static void flush_evol_dependents_on(instanceKlassHandle dependee); 276 #endif // HOTSWAP 277 // Support for fullspeed debugging 278 static void flush_dependents_on_method(methodHandle dependee); 279 280 // tells how many nmethods have dependencies 281 static int number_of_nmethods_with_dependencies(); 282 283 static int get_codemem_full_count(int code_blob_type) { 284 CodeHeap* heap = get_code_heap(code_blob_type); 285 return (heap != NULL) ? heap->full_count() : 0; 286 } 287 }; 288 289 290 // Iterator to iterate over nmethods in the CodeCache. 291 template <class T, class Filter> class CodeBlobIterator : public StackObj { 292 private: 293 CodeBlob* _code_blob; // Current CodeBlob 294 GrowableArrayIterator<CodeHeap*> _heap; 295 GrowableArrayIterator<CodeHeap*> _end; | 243 comp_level == CompLevel_simple || 244 comp_level == CompLevel_full_optimization) { 245 // Non profiled methods 246 return CodeBlobType::MethodNonProfiled; 247 } else if (comp_level == CompLevel_limited_profile || 248 comp_level == CompLevel_full_profile) { 249 // Profiled methods 250 return CodeBlobType::MethodProfiled; 251 } 252 ShouldNotReachHere(); 253 return 0; 254 } 255 256 static void verify_clean_inline_caches(); 257 static void verify_icholder_relocations(); 258 259 // Deoptimization 260 private: 261 static int mark_for_deoptimization(KlassDepChange& changes); 262 #ifdef HOTSWAP 263 static int mark_for_evol_deoptimization(InstanceKlass* dependee); 264 #endif // HOTSWAP 265 266 public: 267 static void mark_all_nmethods_for_deoptimization(); 268 static int mark_for_deoptimization(Method* dependee); 269 static void make_marked_nmethods_not_entrant(); 270 271 // Flushing and deoptimization 272 static void flush_dependents_on(InstanceKlass* dependee); 273 #ifdef HOTSWAP 274 // Flushing and deoptimization in case of evolution 275 static void flush_evol_dependents_on(InstanceKlass* dependee); 276 #endif // HOTSWAP 277 // Support for fullspeed debugging 278 static void flush_dependents_on_method(methodHandle dependee); 279 280 // tells how many nmethods have dependencies 281 static int number_of_nmethods_with_dependencies(); 282 283 static int get_codemem_full_count(int code_blob_type) { 284 CodeHeap* heap = get_code_heap(code_blob_type); 285 return (heap != NULL) ? heap->full_count() : 0; 286 } 287 }; 288 289 290 // Iterator to iterate over nmethods in the CodeCache. 291 template <class T, class Filter> class CodeBlobIterator : public StackObj { 292 private: 293 CodeBlob* _code_blob; // Current CodeBlob 294 GrowableArrayIterator<CodeHeap*> _heap; 295 GrowableArrayIterator<CodeHeap*> _end; |