comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @ 13438:ad72068ac41e

8028993: Full collections with ParallelScavenge slower in JDK 8 compared to 7u40 Summary: Reducing the number of calls to follow_class_loader to speed up the marking phase. Also removed some unnecessary calls to adjust_klass. Reviewed-by: stefank, jmasa, mgerdin
author sjohanss
date Tue, 10 Dec 2013 10:31:00 +0100
parents 86e6d691f2e1
children 63a4eb8bcd23 270d7cb38f40
comparison
equal deleted inserted replaced
13437:1de8e5356754 13438:ad72068ac41e
2431 // Clean up unreferenced symbols in symbol table. 2431 // Clean up unreferenced symbols in symbol table.
2432 SymbolTable::unlink(); 2432 SymbolTable::unlink();
2433 _gc_tracer.report_object_count_after_gc(is_alive_closure()); 2433 _gc_tracer.report_object_count_after_gc(is_alive_closure());
2434 } 2434 }
2435 2435
2436 void PSParallelCompact::follow_klass(ParCompactionManager* cm, Klass* klass) {
2437 ClassLoaderData* cld = klass->class_loader_data();
2438 // The actual processing of the klass is done when we
2439 // traverse the list of Klasses in the class loader data.
2440 PSParallelCompact::follow_class_loader(cm, cld);
2441 }
2442
2443 void PSParallelCompact::adjust_klass(ParCompactionManager* cm, Klass* klass) {
2444 ClassLoaderData* cld = klass->class_loader_data();
2445 // The actual processing of the klass is done when we
2446 // traverse the list of Klasses in the class loader data.
2447 PSParallelCompact::adjust_class_loader(cm, cld);
2448 }
2449
2450 void PSParallelCompact::follow_class_loader(ParCompactionManager* cm, 2436 void PSParallelCompact::follow_class_loader(ParCompactionManager* cm,
2451 ClassLoaderData* cld) { 2437 ClassLoaderData* cld) {
2452 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 2438 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
2453 PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure); 2439 PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure);
2454 2440
2455 cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true); 2441 cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true);
2456 }
2457
2458 void PSParallelCompact::adjust_class_loader(ParCompactionManager* cm,
2459 ClassLoaderData* cld) {
2460 cld->oops_do(PSParallelCompact::adjust_pointer_closure(),
2461 PSParallelCompact::adjust_klass_closure(),
2462 true);
2463 } 2442 }
2464 2443
2465 // This should be moved to the shared markSweep code! 2444 // This should be moved to the shared markSweep code!
2466 class PSAlwaysTrueClosure: public BoolObjectClosure { 2445 class PSAlwaysTrueClosure: public BoolObjectClosure {
2467 public: 2446 public: