23 */
24
25 #include "precompiled.hpp"
26 #include "gc/g1/g1CollectedHeap.hpp"
27 #include "gc/g1/g1ConcurrentMarkBitMap.inline.hpp"
28 #include "gc/g1/g1FullCollector.hpp"
29 #include "gc/g1/g1FullGCCompactionPoint.hpp"
30 #include "gc/g1/g1FullGCCompactTask.hpp"
31 #include "gc/g1/heapRegion.inline.hpp"
32 #include "gc/shared/gcTraceTime.inline.hpp"
33 #include "logging/log.hpp"
34 #include "utilities/ticks.inline.hpp"
35
36 class G1ResetHumongousClosure : public HeapRegionClosure {
37 G1CMBitMap* _bitmap;
38
39 public:
40 G1ResetHumongousClosure(G1CMBitMap* bitmap) :
41 _bitmap(bitmap) { }
42
43 bool do_heap_region(HeapRegion* current) {
44 if (current->is_humongous()) {
45 if (current->is_starts_humongous()) {
46 oop obj = oop(current->bottom());
47 if (_bitmap->is_marked(obj)) {
48 // Clear bitmap and fix mark word.
49 _bitmap->clear(obj);
50 obj->init_mark();
51 } else {
52 assert(current->is_empty(), "Should have been cleared in phase 2.");
53 }
54 }
55 current->reset_during_compaction();
56 }
57 return false;
58 }
59 };
60
61 size_t G1FullGCCompactTask::G1CompactRegionClosure::apply(oop obj) {
62 size_t size = obj->size();
63 HeapWord* destination = (HeapWord*)obj->forwardee();
|
23 */
24
25 #include "precompiled.hpp"
26 #include "gc/g1/g1CollectedHeap.hpp"
27 #include "gc/g1/g1ConcurrentMarkBitMap.inline.hpp"
28 #include "gc/g1/g1FullCollector.hpp"
29 #include "gc/g1/g1FullGCCompactionPoint.hpp"
30 #include "gc/g1/g1FullGCCompactTask.hpp"
31 #include "gc/g1/heapRegion.inline.hpp"
32 #include "gc/shared/gcTraceTime.inline.hpp"
33 #include "logging/log.hpp"
34 #include "utilities/ticks.inline.hpp"
35
36 class G1ResetHumongousClosure : public HeapRegionClosure {
37 G1CMBitMap* _bitmap;
38
39 public:
40 G1ResetHumongousClosure(G1CMBitMap* bitmap) :
41 _bitmap(bitmap) { }
42
43 bool doHeapRegion(HeapRegion* current) {
44 if (current->is_humongous()) {
45 if (current->is_starts_humongous()) {
46 oop obj = oop(current->bottom());
47 if (_bitmap->is_marked(obj)) {
48 // Clear bitmap and fix mark word.
49 _bitmap->clear(obj);
50 obj->init_mark();
51 } else {
52 assert(current->is_empty(), "Should have been cleared in phase 2.");
53 }
54 }
55 current->reset_during_compaction();
56 }
57 return false;
58 }
59 };
60
61 size_t G1FullGCCompactTask::G1CompactRegionClosure::apply(oop obj) {
62 size_t size = obj->size();
63 HeapWord* destination = (HeapWord*)obj->forwardee();
|