comparison src/share/vm/code/codeCache.hpp @ 1202:5f24d0319e54

4360113: Evict nmethods when code cache gets full Summary: Speculatively unload the oldest nmethods when code cache gets full. Reviewed-by: never, kvn Contributed-by: eric.caspole@amd.com
author kvn
date Fri, 29 Jan 2010 09:27:22 -0800
parents 148e5441d916
children bfe29ec02863
comparison
equal deleted inserted replaced
1201:24128c2ffa87 1202:5f24d0319e54
44 static CodeHeap * _heap; 44 static CodeHeap * _heap;
45 static int _number_of_blobs; 45 static int _number_of_blobs;
46 static int _number_of_nmethods_with_dependencies; 46 static int _number_of_nmethods_with_dependencies;
47 static bool _needs_cache_clean; 47 static bool _needs_cache_clean;
48 static nmethod* _scavenge_root_nmethods; // linked via nm->scavenge_root_link() 48 static nmethod* _scavenge_root_nmethods; // linked via nm->scavenge_root_link()
49 static nmethod* _saved_nmethods; // linked via nm->saved_nmethod_look()
49 50
50 static void verify_if_often() PRODUCT_RETURN; 51 static void verify_if_often() PRODUCT_RETURN;
51 52
52 static void mark_scavenge_root_nmethods() PRODUCT_RETURN; 53 static void mark_scavenge_root_nmethods() PRODUCT_RETURN;
53 static void verify_perm_nmethods(CodeBlobClosure* f_or_null) PRODUCT_RETURN; 54 static void verify_perm_nmethods(CodeBlobClosure* f_or_null) PRODUCT_RETURN;
139 static address first_address(); // first address used for CodeBlobs 140 static address first_address(); // first address used for CodeBlobs
140 static address last_address(); // last address used for CodeBlobs 141 static address last_address(); // last address used for CodeBlobs
141 static size_t capacity() { return _heap->capacity(); } 142 static size_t capacity() { return _heap->capacity(); }
142 static size_t max_capacity() { return _heap->max_capacity(); } 143 static size_t max_capacity() { return _heap->max_capacity(); }
143 static size_t unallocated_capacity() { return _heap->unallocated_capacity(); } 144 static size_t unallocated_capacity() { return _heap->unallocated_capacity(); }
145 static bool needs_flushing() { return unallocated_capacity() < CodeCacheFlushingMinimumFreeSpace; }
144 146
145 static bool needs_cache_clean() { return _needs_cache_clean; } 147 static bool needs_cache_clean() { return _needs_cache_clean; }
146 static void set_needs_cache_clean(bool v) { _needs_cache_clean = v; } 148 static void set_needs_cache_clean(bool v) { _needs_cache_clean = v; }
147 static void clear_inline_caches(); // clear all inline caches 149 static void clear_inline_caches(); // clear all inline caches
150
151 static nmethod* find_and_remove_saved_code(methodOop m);
152 static void remove_saved_code(nmethod* nm);
153 static void speculatively_disconnect(nmethod* nm);
148 154
149 // Deoptimization 155 // Deoptimization
150 static int mark_for_deoptimization(DepChange& changes); 156 static int mark_for_deoptimization(DepChange& changes);
151 #ifdef HOTSWAP 157 #ifdef HOTSWAP
152 static int mark_for_evol_deoptimization(instanceKlassHandle dependee); 158 static int mark_for_evol_deoptimization(instanceKlassHandle dependee);