33 #include "memory/genRemSet.hpp"
34 #include "memory/generationSpec.hpp"
35 #include "memory/iterator.hpp"
36 #include "memory/referencePolicy.hpp"
37 #include "memory/space.inline.hpp"
38 #include "oops/instanceRefKlass.hpp"
39 #include "oops/oop.inline.hpp"
40 #include "runtime/java.hpp"
41 #include "runtime/thread.inline.hpp"
42 #include "utilities/copy.hpp"
43 #include "utilities/stack.inline.hpp"
44
45 //
46 // DefNewGeneration functions.
47
48 // Methods of protected closure types.
49
50 DefNewGeneration::IsAliveClosure::IsAliveClosure(Generation* g) : _g(g) {
51 assert(g->level() == 0, "Optimized for youngest gen.");
52 }
53 void DefNewGeneration::IsAliveClosure::do_object(oop p) {
54 assert(false, "Do not call.");
55 }
56 bool DefNewGeneration::IsAliveClosure::do_object_b(oop p) {
57 return (HeapWord*)p >= _g->reserved().end() || p->is_forwarded();
58 }
59
60 DefNewGeneration::KeepAliveClosure::
61 KeepAliveClosure(ScanWeakRefClosure* cl) : _cl(cl) {
62 GenRemSet* rs = GenCollectedHeap::heap()->rem_set();
63 assert(rs->rs_kind() == GenRemSet::CardTable, "Wrong rem set kind.");
64 _rs = (CardTableRS*)rs;
65 }
66
67 void DefNewGeneration::KeepAliveClosure::do_oop(oop* p) { DefNewGeneration::KeepAliveClosure::do_oop_work(p); }
68 void DefNewGeneration::KeepAliveClosure::do_oop(narrowOop* p) { DefNewGeneration::KeepAliveClosure::do_oop_work(p); }
69
70
71 DefNewGeneration::FastKeepAliveClosure::
72 FastKeepAliveClosure(DefNewGeneration* g, ScanWeakRefClosure* cl) :
73 DefNewGeneration::KeepAliveClosure(cl) {
74 _boundary = g->reserved().end();
75 }
|
33 #include "memory/genRemSet.hpp"
34 #include "memory/generationSpec.hpp"
35 #include "memory/iterator.hpp"
36 #include "memory/referencePolicy.hpp"
37 #include "memory/space.inline.hpp"
38 #include "oops/instanceRefKlass.hpp"
39 #include "oops/oop.inline.hpp"
40 #include "runtime/java.hpp"
41 #include "runtime/thread.inline.hpp"
42 #include "utilities/copy.hpp"
43 #include "utilities/stack.inline.hpp"
44
45 //
46 // DefNewGeneration functions.
47
48 // Methods of protected closure types.
49
50 DefNewGeneration::IsAliveClosure::IsAliveClosure(Generation* g) : _g(g) {
51 assert(g->level() == 0, "Optimized for youngest gen.");
52 }
53 bool DefNewGeneration::IsAliveClosure::do_object_b(oop p) {
54 return (HeapWord*)p >= _g->reserved().end() || p->is_forwarded();
55 }
56
57 DefNewGeneration::KeepAliveClosure::
58 KeepAliveClosure(ScanWeakRefClosure* cl) : _cl(cl) {
59 GenRemSet* rs = GenCollectedHeap::heap()->rem_set();
60 assert(rs->rs_kind() == GenRemSet::CardTable, "Wrong rem set kind.");
61 _rs = (CardTableRS*)rs;
62 }
63
64 void DefNewGeneration::KeepAliveClosure::do_oop(oop* p) { DefNewGeneration::KeepAliveClosure::do_oop_work(p); }
65 void DefNewGeneration::KeepAliveClosure::do_oop(narrowOop* p) { DefNewGeneration::KeepAliveClosure::do_oop_work(p); }
66
67
68 DefNewGeneration::FastKeepAliveClosure::
69 FastKeepAliveClosure(DefNewGeneration* g, ScanWeakRefClosure* cl) :
70 DefNewGeneration::KeepAliveClosure(cl) {
71 _boundary = g->reserved().end();
72 }
|