comparison src/share/vm/oops/instanceKlassKlass.cpp @ 1706:9d7a8ab3736b

6962589: remove breadth first scanning code from parallel gc Summary: Remove the breadth-first copying order from ParallelScavenge and use depth-first by default. Reviewed-by: jcoomes, ysr, johnc
author tonyp
date Thu, 22 Jul 2010 10:27:41 -0400
parents c18cbe5936b8
children f95d63e2154a
comparison
equal deleted inserted replaced
1705:2d160770d2e5 1706:9d7a8ab3736b
290 290
291 return klassKlass::oop_adjust_pointers(obj); 291 return klassKlass::oop_adjust_pointers(obj);
292 } 292 }
293 293
294 #ifndef SERIALGC 294 #ifndef SERIALGC
295 void instanceKlassKlass::oop_copy_contents(PSPromotionManager* pm, oop obj) {
296 assert(!pm->depth_first(), "invariant");
297 instanceKlass* ik = instanceKlass::cast(klassOop(obj));
298 ik->copy_static_fields(pm);
299
300 oop* loader_addr = ik->adr_class_loader();
301 if (PSScavenge::should_scavenge(loader_addr)) {
302 pm->claim_or_forward_breadth(loader_addr);
303 }
304
305 oop* pd_addr = ik->adr_protection_domain();
306 if (PSScavenge::should_scavenge(pd_addr)) {
307 pm->claim_or_forward_breadth(pd_addr);
308 }
309
310 oop* hk_addr = ik->adr_host_klass();
311 if (PSScavenge::should_scavenge(hk_addr)) {
312 pm->claim_or_forward_breadth(hk_addr);
313 }
314
315 oop* sg_addr = ik->adr_signers();
316 if (PSScavenge::should_scavenge(sg_addr)) {
317 pm->claim_or_forward_breadth(sg_addr);
318 }
319
320 oop* bsm_addr = ik->adr_bootstrap_method();
321 if (PSScavenge::should_scavenge(bsm_addr)) {
322 pm->claim_or_forward_breadth(bsm_addr);
323 }
324
325 klassKlass::oop_copy_contents(pm, obj);
326 }
327
328 void instanceKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { 295 void instanceKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
329 assert(pm->depth_first(), "invariant");
330 instanceKlass* ik = instanceKlass::cast(klassOop(obj)); 296 instanceKlass* ik = instanceKlass::cast(klassOop(obj));
331 ik->push_static_fields(pm); 297 ik->push_static_fields(pm);
332 298
333 oop* loader_addr = ik->adr_class_loader(); 299 oop* loader_addr = ik->adr_class_loader();
334 if (PSScavenge::should_scavenge(loader_addr)) { 300 if (PSScavenge::should_scavenge(loader_addr)) {
353 oop* bsm_addr = ik->adr_bootstrap_method(); 319 oop* bsm_addr = ik->adr_bootstrap_method();
354 if (PSScavenge::should_scavenge(bsm_addr)) { 320 if (PSScavenge::should_scavenge(bsm_addr)) {
355 pm->claim_or_forward_depth(bsm_addr); 321 pm->claim_or_forward_depth(bsm_addr);
356 } 322 }
357 323
358 klassKlass::oop_copy_contents(pm, obj); 324 klassKlass::oop_push_contents(pm, obj);
359 } 325 }
360 326
361 int instanceKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { 327 int instanceKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
362 assert(obj->is_klass(),"must be a klass"); 328 assert(obj->is_klass(),"must be a klass");
363 assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), 329 assert(klassOop(obj)->klass_part()->oop_is_instance_slow(),