comparison src/share/vm/code/codeCache.cpp @ 1563:1a5913bf5e19

6951083: oops and relocations should part of nmethod not CodeBlob Summary: This moves the oops from Codeblob to nmethod. Reviewed-by: kvn, never
author twisti
date Thu, 20 May 2010 06:34:23 -0700
parents bfe29ec02863
children e9ff18c4ace7
comparison
equal deleted inserted replaced
1544:1a88d3c58e1d 1563:1a5913bf5e19
72 void add(CodeBlob* cb) { 72 void add(CodeBlob* cb) {
73 count++; 73 count++;
74 total_size += cb->size(); 74 total_size += cb->size();
75 header_size += cb->header_size(); 75 header_size += cb->header_size();
76 relocation_size += cb->relocation_size(); 76 relocation_size += cb->relocation_size();
77 scopes_oop_size += cb->oops_size();
78 if (cb->is_nmethod()) { 77 if (cb->is_nmethod()) {
79 nmethod *nm = (nmethod*)cb; 78 nmethod* nm = cb->as_nmethod_or_null();
80 code_size += nm->code_size(); 79 code_size += nm->code_size();
81 stub_size += nm->stub_size(); 80 stub_size += nm->stub_size();
82 81
82 scopes_oop_size += nm->oops_size();
83 scopes_data_size += nm->scopes_data_size(); 83 scopes_data_size += nm->scopes_data_size();
84 scopes_pcs_size += nm->scopes_pcs_size(); 84 scopes_pcs_size += nm->scopes_pcs_size();
85 } else { 85 } else {
86 code_size += cb->instructions_size(); 86 code_size += cb->instructions_size();
87 } 87 }
260 int CodeCache::alignment_offset() { 260 int CodeCache::alignment_offset() {
261 return (int)_heap->alignment_offset(); 261 return (int)_heap->alignment_offset();
262 } 262 }
263 263
264 264
265 // Mark code blobs for unloading if they contain otherwise 265 // Mark nmethods for unloading if they contain otherwise unreachable
266 // unreachable oops. 266 // oops.
267 void CodeCache::do_unloading(BoolObjectClosure* is_alive, 267 void CodeCache::do_unloading(BoolObjectClosure* is_alive,
268 OopClosure* keep_alive, 268 OopClosure* keep_alive,
269 bool unloading_occurred) { 269 bool unloading_occurred) {
270 assert_locked_or_safepoint(CodeCache_lock); 270 assert_locked_or_safepoint(CodeCache_lock);
271 FOR_ALL_ALIVE_BLOBS(cb) { 271 FOR_ALL_ALIVE_NMETHODS(nm) {
272 cb->do_unloading(is_alive, keep_alive, unloading_occurred); 272 nm->do_unloading(is_alive, keep_alive, unloading_occurred);
273 } 273 }
274 } 274 }
275 275
276 void CodeCache::blobs_do(CodeBlobClosure* f) { 276 void CodeCache::blobs_do(CodeBlobClosure* f) {
277 assert_locked_or_safepoint(CodeCache_lock); 277 assert_locked_or_safepoint(CodeCache_lock);
507 nmethod *nm = (nmethod*)cb; 507 nmethod *nm = (nmethod*)cb;
508 assert(!nm->is_unloaded(), "Tautology"); 508 assert(!nm->is_unloaded(), "Tautology");
509 if (needs_cache_clean()) { 509 if (needs_cache_clean()) {
510 nm->cleanup_inline_caches(); 510 nm->cleanup_inline_caches();
511 } 511 }
512 debug_only(nm->verify();) 512 DEBUG_ONLY(nm->verify());
513 } 513 nm->fix_oop_relocations();
514 cb->fix_oop_relocations(); 514 }
515 } 515 }
516 set_needs_cache_clean(false); 516 set_needs_cache_clean(false);
517 prune_scavenge_root_nmethods(); 517 prune_scavenge_root_nmethods();
518 assert(!nmethod::oops_do_marking_is_active(), "oops_do_marking_prologue must be called"); 518 assert(!nmethod::oops_do_marking_is_active(), "oops_do_marking_prologue must be called");
519 } 519 }