equal
deleted
inserted
replaced
50 #include "runtime/thread.inline.hpp" |
50 #include "runtime/thread.inline.hpp" |
51 #include "runtime/vmThread.hpp" |
51 #include "runtime/vmThread.hpp" |
52 #include "utilities/copy.hpp" |
52 #include "utilities/copy.hpp" |
53 #include "utilities/events.hpp" |
53 #include "utilities/events.hpp" |
54 |
54 |
55 void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, |
55 void GenMarkSweep::invoke_at_safepoint(int level, ReferenceProcessor* rp, bool clear_all_softrefs) { |
56 bool clear_all_softrefs) { |
56 guarantee(level == 1, "We always collect both old and young."); |
57 assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint"); |
57 assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint"); |
58 |
58 |
59 GenCollectedHeap* gch = GenCollectedHeap::heap(); |
59 GenCollectedHeap* gch = GenCollectedHeap::heap(); |
60 #ifdef ASSERT |
60 #ifdef ASSERT |
61 if (gch->collector_policy()->should_clear_all_soft_refs()) { |
61 if (gch->collector_policy()->should_clear_all_soft_refs()) { |
81 // Increment the invocation count |
81 // Increment the invocation count |
82 _total_invocations++; |
82 _total_invocations++; |
83 |
83 |
84 // Capture heap size before collection for printing. |
84 // Capture heap size before collection for printing. |
85 size_t gch_prev_used = gch->used(); |
85 size_t gch_prev_used = gch->used(); |
86 |
|
87 // Some of the card table updates below assume that the perm gen is |
|
88 // also being collected. |
|
89 assert(level == gch->n_gens() - 1, |
|
90 "All generations are being collected, ergo perm gen too."); |
|
91 |
86 |
92 // Capture used regions for each generation that will be |
87 // Capture used regions for each generation that will be |
93 // subject to collection, so that card table adjustments can |
88 // subject to collection, so that card table adjustments can |
94 // be made intelligently (see clear / invalidate further below). |
89 // be made intelligently (see clear / invalidate further below). |
95 gch->save_used_regions(level); |
90 gch->save_used_regions(level); |
132 Generation* g = gch->get_gen(level); |
127 Generation* g = gch->get_gen(level); |
133 rs->clear_into_younger(g); |
128 rs->clear_into_younger(g); |
134 } else { |
129 } else { |
135 // Invalidate the cards corresponding to the currently used |
130 // Invalidate the cards corresponding to the currently used |
136 // region and clear those corresponding to the evacuated region |
131 // region and clear those corresponding to the evacuated region |
137 // of all generations just collected (i.e. level and younger). |
132 // of all generations just collected. |
138 rs->invalidate_or_clear(gch->get_gen(level), |
133 rs->invalidate_or_clear(gch->get_gen(1)); |
139 true /* younger */); |
134 rs->invalidate_or_clear(gch->get_gen(0)); |
140 } |
135 } |
141 |
136 |
142 Threads::gc_epilogue(); |
137 Threads::gc_epilogue(); |
143 CodeCache::gc_epilogue(); |
138 CodeCache::gc_epilogue(); |
144 JvmtiExport::gc_epilogue(); |
139 JvmtiExport::gc_epilogue(); |