comparison src/share/vm/code/codeCache.hpp @ 10114:a7fb14888912

8006952: Slow VM due to excessive code cache freelist iteration Summary: Remove continous free block requirement Reviewed-by: kvn
author neliasso
date Thu, 11 Apr 2013 13:57:44 +0200
parents 3c786355ffb4
children 0cfa93c2fcc4
comparison
equal deleted inserted replaced
10113:4b2eebe03f93 10114:a7fb14888912
68 68
69 // Initialization 69 // Initialization
70 static void initialize(); 70 static void initialize();
71 71
72 // Allocation/administration 72 // Allocation/administration
73 static CodeBlob* allocate(int size); // allocates a new CodeBlob 73 static CodeBlob* allocate(int size, bool is_critical = false); // allocates a new CodeBlob
74 static void commit(CodeBlob* cb); // called when the allocated CodeBlob has been filled 74 static void commit(CodeBlob* cb); // called when the allocated CodeBlob has been filled
75 static int alignment_unit(); // guaranteed alignment of all CodeBlobs 75 static int alignment_unit(); // guaranteed alignment of all CodeBlobs
76 static int alignment_offset(); // guaranteed offset of first CodeBlob byte within alignment unit (i.e., allocation header) 76 static int alignment_offset(); // guaranteed offset of first CodeBlob byte within alignment unit (i.e., allocation header)
77 static void free(CodeBlob* cb); // frees a CodeBlob 77 static void free(CodeBlob* cb); // frees a CodeBlob
78 static void flush(); // flushes all CodeBlobs 78 static void flush(); // flushes all CodeBlobs
154 154
155 // The full limits of the codeCache 155 // The full limits of the codeCache
156 static address low_bound() { return (address) _heap->low_boundary(); } 156 static address low_bound() { return (address) _heap->low_boundary(); }
157 static address high_bound() { return (address) _heap->high_boundary(); } 157 static address high_bound() { return (address) _heap->high_boundary(); }
158 158
159 static bool has_space(int size) {
160 // Always leave some room in the CodeCache for I2C/C2I adapters
161 return largest_free_block() > (CodeCacheMinimumFreeSpace + size);
162 }
163
164 // Profiling 159 // Profiling
165 static address first_address(); // first address used for CodeBlobs 160 static address first_address(); // first address used for CodeBlobs
166 static address last_address(); // last address used for CodeBlobs 161 static address last_address(); // last address used for CodeBlobs
167 static size_t capacity() { return _heap->capacity(); } 162 static size_t capacity() { return _heap->capacity(); }
168 static size_t max_capacity() { return _heap->max_capacity(); } 163 static size_t max_capacity() { return _heap->max_capacity(); }
169 static size_t unallocated_capacity() { return _heap->unallocated_capacity(); } 164 static size_t unallocated_capacity() { return _heap->unallocated_capacity(); }
170 static size_t largest_free_block(); 165 static bool needs_flushing() { return unallocated_capacity() < CodeCacheFlushingMinimumFreeSpace; }
171 static bool needs_flushing() { return largest_free_block() < CodeCacheFlushingMinimumFreeSpace; }
172 166
173 static bool needs_cache_clean() { return _needs_cache_clean; } 167 static bool needs_cache_clean() { return _needs_cache_clean; }
174 static void set_needs_cache_clean(bool v) { _needs_cache_clean = v; } 168 static void set_needs_cache_clean(bool v) { _needs_cache_clean = v; }
175 static void clear_inline_caches(); // clear all inline caches 169 static void clear_inline_caches(); // clear all inline caches
176 170