src/hotspot/share/gc/serial/markSweep.inline.hpp
changeset 50752 9d62da00bf15
parent 50728 9375184cec98
child 50772 c1b82eee939f
equal deleted inserted replaced
50751:d9132bdf6c30 50752:9d62da00bf15
    23  */
    23  */
    24 
    24 
    25 #ifndef SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
    25 #ifndef SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
    26 #define SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
    26 #define SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
    27 
    27 
       
    28 #include "classfile/classLoaderData.inline.hpp"
    28 #include "gc/serial/markSweep.hpp"
    29 #include "gc/serial/markSweep.hpp"
    29 #include "memory/metaspaceShared.hpp"
    30 #include "memory/metaspaceShared.hpp"
    30 #include "memory/universe.hpp"
    31 #include "memory/universe.hpp"
    31 #include "oops/markOop.inline.hpp"
    32 #include "oops/markOop.inline.hpp"
    32 #include "oops/access.inline.hpp"
    33 #include "oops/access.inline.hpp"
    33 #include "oops/compressedOops.inline.hpp"
    34 #include "oops/compressedOops.inline.hpp"
    34 #include "oops/oop.inline.hpp"
    35 #include "oops/oop.inline.hpp"
    35 
    36 
    36 inline int MarkSweep::adjust_pointers(oop obj) {
    37 inline void MarkSweep::mark_object(oop obj) {
    37   return obj->oop_iterate_size(&MarkSweep::adjust_pointer_closure);
    38   // some marks may contain information we need to preserve so we store them away
       
    39   // and overwrite the mark.  We'll restore it at the end of markSweep.
       
    40   markOop mark = obj->mark_raw();
       
    41   obj->set_mark_raw(markOopDesc::prototype()->set_marked());
       
    42 
       
    43   if (mark->must_be_preserved(obj)) {
       
    44     preserve_mark(obj, mark);
       
    45   }
    38 }
    46 }
       
    47 
       
    48 template <class T> inline void MarkSweep::mark_and_push(T* p) {
       
    49   T heap_oop = RawAccess<>::oop_load(p);
       
    50   if (!CompressedOops::is_null(heap_oop)) {
       
    51     oop obj = CompressedOops::decode_not_null(heap_oop);
       
    52     if (!obj->mark_raw()->is_marked()) {
       
    53       mark_object(obj);
       
    54       _marking_stack.push(obj);
       
    55     }
       
    56   }
       
    57 }
       
    58 
       
    59 inline void MarkSweep::follow_klass(Klass* klass) {
       
    60   oop op = klass->klass_holder();
       
    61   MarkSweep::mark_and_push(&op);
       
    62 }
       
    63 
       
    64 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
       
    65   MarkSweep::follow_cld_closure.do_cld(cld);
       
    66 }
       
    67 
       
    68 template <typename T>
       
    69 inline void MarkAndPushClosure::do_oop_work(T* p)            { MarkSweep::mark_and_push(p); }
       
    70 inline void MarkAndPushClosure::do_oop(oop* p)               { do_oop_work(p); }
       
    71 inline void MarkAndPushClosure::do_oop(narrowOop* p)         { do_oop_work(p); }
       
    72 inline void MarkAndPushClosure::do_klass(Klass* k)           { MarkSweep::follow_klass(k); }
       
    73 inline void MarkAndPushClosure::do_cld(ClassLoaderData* cld) { MarkSweep::follow_cld(cld); }
    39 
    74 
    40 template <class T> inline void MarkSweep::adjust_pointer(T* p) {
    75 template <class T> inline void MarkSweep::adjust_pointer(T* p) {
    41   T heap_oop = RawAccess<>::oop_load(p);
    76   T heap_oop = RawAccess<>::oop_load(p);
    42   if (!CompressedOops::is_null(heap_oop)) {
    77   if (!CompressedOops::is_null(heap_oop)) {
    43     oop obj = CompressedOops::decode_not_null(heap_oop);
    78     oop obj = CompressedOops::decode_not_null(heap_oop);
    57       RawAccess<IS_NOT_NULL>::oop_store(p, new_obj);
    92       RawAccess<IS_NOT_NULL>::oop_store(p, new_obj);
    58     }
    93     }
    59   }
    94   }
    60 }
    95 }
    61 
    96 
       
    97 template <typename T>
       
    98 void AdjustPointerClosure::do_oop_work(T* p)           { MarkSweep::adjust_pointer(p); }
       
    99 inline void AdjustPointerClosure::do_oop(oop* p)       { do_oop_work(p); }
       
   100 inline void AdjustPointerClosure::do_oop(narrowOop* p) { do_oop_work(p); }
       
   101 
       
   102 
       
   103 inline int MarkSweep::adjust_pointers(oop obj) {
       
   104   return obj->oop_iterate_size(&MarkSweep::adjust_pointer_closure);
       
   105 }
       
   106 
    62 #endif // SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
   107 #endif // SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP