24 |
24 |
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP |
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPARALLELCOMPACT_INLINE_HPP |
27 |
27 |
28 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" |
28 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" |
29 #include "gc_implementation/parallelScavenge/psCompactionManager.hpp" |
|
30 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" |
29 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" |
31 #include "gc_interface/collectedHeap.hpp" |
30 #include "gc_interface/collectedHeap.hpp" |
32 #include "oops/klass.hpp" |
31 #include "oops/klass.hpp" |
33 #include "oops/oop.inline.hpp" |
32 #include "oops/oop.inline.hpp" |
34 |
|
35 template <typename T> |
|
36 inline void PSParallelCompact::mark_and_push(ParCompactionManager* cm, T* p) { |
|
37 T heap_oop = oopDesc::load_heap_oop(p); |
|
38 if (!oopDesc::is_null(heap_oop)) { |
|
39 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); |
|
40 assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap"); |
|
41 |
|
42 if (mark_bitmap()->is_unmarked(obj) && mark_obj(obj)) { |
|
43 cm->push(obj); |
|
44 } |
|
45 } |
|
46 } |
|
47 |
|
48 template <typename T> |
|
49 inline void PSParallelCompact::MarkAndPushClosure::do_oop_nv(T* p) { |
|
50 mark_and_push(_compaction_manager, p); |
|
51 } |
|
52 |
|
53 inline void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p) { do_oop_nv(p); } |
|
54 inline void PSParallelCompact::MarkAndPushClosure::do_oop(narrowOop* p) { do_oop_nv(p); } |
|
55 |
|
56 inline void PSParallelCompact::follow_klass(ParCompactionManager* cm, Klass* klass) { |
|
57 oop holder = klass->klass_holder(); |
|
58 mark_and_push(cm, &holder); |
|
59 } |
|
60 |
33 |
61 template <class T> |
34 template <class T> |
62 inline void PSParallelCompact::adjust_pointer(T* p) { |
35 inline void PSParallelCompact::adjust_pointer(T* p) { |
63 T heap_oop = oopDesc::load_heap_oop(p); |
36 T heap_oop = oopDesc::load_heap_oop(p); |
64 if (!oopDesc::is_null(heap_oop)) { |
37 if (!oopDesc::is_null(heap_oop)) { |