27
28 #include "gc_implementation/g1/g1RemSet.hpp"
29 #include "gc_implementation/g1/heapRegion.hpp"
30 #include "gc_implementation/g1/heapRegionRemSet.hpp"
31 #include "oops/oop.inline.hpp"
32
33 inline uint G1RemSet::n_workers() {
34 if (_g1->workers() != NULL) {
35 return _g1->workers()->total_workers();
36 } else {
37 return 1;
38 }
39 }
40
41 template <class T>
42 inline void G1RemSet::write_ref(HeapRegion* from, T* p) {
43 par_write_ref(from, p, 0);
44 }
45
46 template <class T>
47 inline void G1RemSet::par_write_ref(HeapRegion* from, T* p, int tid) {
48 oop obj = oopDesc::load_decode_heap_oop(p);
49 if (obj == NULL) {
50 return;
51 }
52
53 #ifdef ASSERT
54 // can't do because of races
55 // assert(obj == NULL || obj->is_oop(), "expected an oop");
56
57 // Do the safe subset of is_oop
58 #ifdef CHECK_UNHANDLED_OOPS
59 oopDesc* o = obj.obj();
60 #else
61 oopDesc* o = obj;
62 #endif // CHECK_UNHANDLED_OOPS
63 assert((intptr_t)o % MinObjAlignmentInBytes == 0, "not oop aligned");
64 assert(Universe::heap()->is_in_reserved(obj), "must be in heap");
65 #endif // ASSERT
66
67 assert(from == NULL || from->is_in_reserved(p), "p is not in from");
|
27
28 #include "gc_implementation/g1/g1RemSet.hpp"
29 #include "gc_implementation/g1/heapRegion.hpp"
30 #include "gc_implementation/g1/heapRegionRemSet.hpp"
31 #include "oops/oop.inline.hpp"
32
33 inline uint G1RemSet::n_workers() {
34 if (_g1->workers() != NULL) {
35 return _g1->workers()->total_workers();
36 } else {
37 return 1;
38 }
39 }
40
41 template <class T>
42 inline void G1RemSet::write_ref(HeapRegion* from, T* p) {
43 par_write_ref(from, p, 0);
44 }
45
46 template <class T>
47 inline void G1RemSet::par_write_ref(HeapRegion* from, T* p, uint tid) {
48 oop obj = oopDesc::load_decode_heap_oop(p);
49 if (obj == NULL) {
50 return;
51 }
52
53 #ifdef ASSERT
54 // can't do because of races
55 // assert(obj == NULL || obj->is_oop(), "expected an oop");
56
57 // Do the safe subset of is_oop
58 #ifdef CHECK_UNHANDLED_OOPS
59 oopDesc* o = obj.obj();
60 #else
61 oopDesc* o = obj;
62 #endif // CHECK_UNHANDLED_OOPS
63 assert((intptr_t)o % MinObjAlignmentInBytes == 0, "not oop aligned");
64 assert(Universe::heap()->is_in_reserved(obj), "must be in heap");
65 #endif // ASSERT
66
67 assert(from == NULL || from->is_in_reserved(p), "p is not in from");
|