17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/g1/g1CollectedHeap.inline.hpp"
27 #include "gc/g1/g1ConcurrentMarkBitMap.inline.hpp"
28 #include "gc/g1/g1FullCollector.inline.hpp"
29 #include "gc/g1/g1FullGCCompactionPoint.hpp"
30 #include "gc/g1/g1FullGCMarker.hpp"
31 #include "gc/g1/g1FullGCOopClosures.inline.hpp"
32 #include "gc/g1/g1FullGCPrepareTask.inline.hpp"
33 #include "gc/g1/g1HotCardCache.hpp"
34 #include "gc/g1/heapRegion.inline.hpp"
35 #include "gc/shared/gcTraceTime.inline.hpp"
36 #include "gc/shared/referenceProcessor.hpp"
37 #include "logging/log.hpp"
38 #include "memory/iterator.inline.hpp"
39 #include "oops/oop.inline.hpp"
40 #include "utilities/ticks.hpp"
41
42 G1DetermineCompactionQueueClosure::G1DetermineCompactionQueueClosure(G1FullCollector* collector) :
43 _g1h(G1CollectedHeap::heap()),
44 _collector(collector),
45 _cur_worker(0) { }
46
47 bool G1FullGCPrepareTask::G1CalculatePointersClosure::do_heap_region(HeapRegion* hr) {
48 uint region_idx = hr->hrm_index();
49 assert(_collector->is_compaction_target(region_idx), "must be");
50
51 assert(!hr->is_pinned(), "must be");
52 assert(!hr->is_closed_archive(), "must be");
53 assert(!hr->is_open_archive(), "must be");
54
55 prepare_for_compaction(hr);
56
130 uint const region_idx = hr->hrm_index();
131 if (!_collector->is_compaction_target(region_idx)) {
132 assert(!hr->is_free(), "all free regions should be compaction targets");
133 assert(_collector->is_skip_compacting(region_idx) || hr->is_closed_archive(), "must be");
134 if (hr->is_young()) {
135 // G1 updates the BOT for old region contents incrementally, but young regions
136 // lack BOT information for performance reasons.
137 // Recreate BOT information of high live ratio young regions here to keep expected
138 // performance during scanning their card tables in the collection pauses later.
139 hr->update_bot();
140 }
141 }
142
143 // Reset data structures not valid after Full GC.
144 reset_region_metadata(hr);
145
146 return false;
147 }
148
149 G1FullGCPrepareTask::G1PrepareCompactLiveClosure::G1PrepareCompactLiveClosure(G1FullGCCompactionPoint* cp) :
150 _cp(cp) { }
151
152 size_t G1FullGCPrepareTask::G1PrepareCompactLiveClosure::apply(oop object) {
153 size_t size = object->size();
154 _cp->forward(object, size);
155 return size;
156 }
157
158 void G1FullGCPrepareTask::G1CalculatePointersClosure::prepare_for_compaction(HeapRegion* hr) {
159 if (!_collector->is_free(hr->hrm_index())) {
160 G1PrepareCompactLiveClosure prepare_compact(_cp);
161 hr->apply_to_marked_objects(_bitmap, &prepare_compact);
162 }
163 }
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/g1/g1CollectedHeap.inline.hpp"
27 #include "gc/g1/g1ConcurrentMarkBitMap.inline.hpp"
28 #include "gc/g1/g1FullCollector.inline.hpp"
29 #include "gc/g1/g1FullGCCompactionPoint.hpp"
30 #include "gc/g1/g1FullGCMarker.hpp"
31 #include "gc/g1/g1FullGCOopClosures.inline.hpp"
32 #include "gc/g1/g1FullGCPrepareTask.inline.hpp"
33 #include "gc/g1/g1HotCardCache.hpp"
34 #include "gc/g1/heapRegion.inline.hpp"
35 #include "gc/shared/gcTraceTime.inline.hpp"
36 #include "gc/shared/referenceProcessor.hpp"
37 #include "gc/shared/slidingForwarding.inline.hpp"
38 #include "logging/log.hpp"
39 #include "memory/iterator.inline.hpp"
40 #include "oops/oop.inline.hpp"
41 #include "utilities/ticks.hpp"
42
43 G1DetermineCompactionQueueClosure::G1DetermineCompactionQueueClosure(G1FullCollector* collector) :
44 _g1h(G1CollectedHeap::heap()),
45 _collector(collector),
46 _cur_worker(0) { }
47
48 bool G1FullGCPrepareTask::G1CalculatePointersClosure::do_heap_region(HeapRegion* hr) {
49 uint region_idx = hr->hrm_index();
50 assert(_collector->is_compaction_target(region_idx), "must be");
51
52 assert(!hr->is_pinned(), "must be");
53 assert(!hr->is_closed_archive(), "must be");
54 assert(!hr->is_open_archive(), "must be");
55
56 prepare_for_compaction(hr);
57
131 uint const region_idx = hr->hrm_index();
132 if (!_collector->is_compaction_target(region_idx)) {
133 assert(!hr->is_free(), "all free regions should be compaction targets");
134 assert(_collector->is_skip_compacting(region_idx) || hr->is_closed_archive(), "must be");
135 if (hr->is_young()) {
136 // G1 updates the BOT for old region contents incrementally, but young regions
137 // lack BOT information for performance reasons.
138 // Recreate BOT information of high live ratio young regions here to keep expected
139 // performance during scanning their card tables in the collection pauses later.
140 hr->update_bot();
141 }
142 }
143
144 // Reset data structures not valid after Full GC.
145 reset_region_metadata(hr);
146
147 return false;
148 }
149
150 G1FullGCPrepareTask::G1PrepareCompactLiveClosure::G1PrepareCompactLiveClosure(G1FullGCCompactionPoint* cp) :
151 _cp(cp), _forwarding(G1CollectedHeap::heap()->forwarding()) { }
152
153 size_t G1FullGCPrepareTask::G1PrepareCompactLiveClosure::apply(oop object) {
154 size_t size = object->size();
155 _cp->forward(_forwarding, object, size);
156 return size;
157 }
158
159 void G1FullGCPrepareTask::G1CalculatePointersClosure::prepare_for_compaction(HeapRegion* hr) {
160 if (!_collector->is_free(hr->hrm_index())) {
161 G1PrepareCompactLiveClosure prepare_compact(_cp);
162 hr->apply_to_marked_objects(_bitmap, &prepare_compact);
163 }
164 }
|