comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp @ 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 f2110083203d
children 63a4eb8bcd23 0982ec23da03
comparison
equal deleted inserted replaced
13437:1de8e5356754 13438:ad72068ac41e
1198 // Check mark and maybe push on marking stack 1198 // Check mark and maybe push on marking stack
1199 template <class T> static inline void mark_and_push(ParCompactionManager* cm, 1199 template <class T> static inline void mark_and_push(ParCompactionManager* cm,
1200 T* p); 1200 T* p);
1201 template <class T> static inline void adjust_pointer(T* p); 1201 template <class T> static inline void adjust_pointer(T* p);
1202 1202
1203 static void follow_klass(ParCompactionManager* cm, Klass* klass); 1203 static inline void follow_klass(ParCompactionManager* cm, Klass* klass);
1204 static void adjust_klass(ParCompactionManager* cm, Klass* klass);
1205 1204
1206 static void follow_class_loader(ParCompactionManager* cm, 1205 static void follow_class_loader(ParCompactionManager* cm,
1207 ClassLoaderData* klass);
1208 static void adjust_class_loader(ParCompactionManager* cm,
1209 ClassLoaderData* klass); 1206 ClassLoaderData* klass);
1210 1207
1211 // Compaction support. 1208 // Compaction support.
1212 // Return true if p is in the range [beg_addr, end_addr). 1209 // Return true if p is in the range [beg_addr, end_addr).
1213 static inline bool is_in(HeapWord* p, HeapWord* beg_addr, HeapWord* end_addr); 1210 static inline bool is_in(HeapWord* p, HeapWord* beg_addr, HeapWord* end_addr);
1378 oopDesc::encode_store_heap_oop_not_null(p, new_obj); 1375 oopDesc::encode_store_heap_oop_not_null(p, new_obj);
1379 } 1376 }
1380 } 1377 }
1381 } 1378 }
1382 1379
1380 inline void PSParallelCompact::follow_klass(ParCompactionManager* cm, Klass* klass) {
1381 oop holder = klass->klass_holder();
1382 PSParallelCompact::mark_and_push(cm, &holder);
1383 }
1384
1383 template <class T> 1385 template <class T>
1384 inline void PSParallelCompact::KeepAliveClosure::do_oop_work(T* p) { 1386 inline void PSParallelCompact::KeepAliveClosure::do_oop_work(T* p) {
1385 mark_and_push(_compaction_manager, p); 1387 mark_and_push(_compaction_manager, p);
1386 } 1388 }
1387 1389