29 #include "gc/g1/heapRegionManager.inline.hpp"
30 #include "gc/g1/heapRegionRemSet.inline.hpp"
31 #include "gc/shared/space.inline.hpp"
32 #include "memory/allocation.hpp"
33 #include "memory/padded.inline.hpp"
34 #include "oops/oop.inline.hpp"
35 #include "runtime/atomic.hpp"
36 #include "utilities/bitMap.inline.hpp"
37 #include "utilities/debug.hpp"
38 #include "utilities/formatBuffer.hpp"
39 #include "utilities/globalDefinitions.hpp"
40 #include "utilities/growableArray.hpp"
41
42 const char* HeapRegionRemSet::_state_strings[] = {"Untracked", "Updating", "Complete"};
43 const char* HeapRegionRemSet::_short_state_strings[] = {"UNTRA", "UPDAT", "CMPLT"};
44
45 PerRegionTable* PerRegionTable::alloc(HeapRegion* hr) {
46 PerRegionTable* fl = _free_list;
47 while (fl != NULL) {
48 PerRegionTable* nxt = fl->next();
49 PerRegionTable* res = Atomic::cmpxchg(nxt, &_free_list, fl);
50 if (res == fl) {
51 fl->init(hr, true);
52 return fl;
53 } else {
54 fl = _free_list;
55 }
56 }
57 assert(fl == NULL, "Loop condition.");
58 return new PerRegionTable(hr);
59 }
60
61 PerRegionTable* volatile PerRegionTable::_free_list = NULL;
62
63 size_t OtherRegionsTable::_max_fine_entries = 0;
64 size_t OtherRegionsTable::_mod_max_fine_entries_mask = 0;
65 size_t OtherRegionsTable::_fine_eviction_stride = 0;
66 size_t OtherRegionsTable::_fine_eviction_sample_size = 0;
67
68 OtherRegionsTable::OtherRegionsTable(Mutex* m) :
69 _g1h(G1CollectedHeap::heap()),
|
29 #include "gc/g1/heapRegionManager.inline.hpp"
30 #include "gc/g1/heapRegionRemSet.inline.hpp"
31 #include "gc/shared/space.inline.hpp"
32 #include "memory/allocation.hpp"
33 #include "memory/padded.inline.hpp"
34 #include "oops/oop.inline.hpp"
35 #include "runtime/atomic.hpp"
36 #include "utilities/bitMap.inline.hpp"
37 #include "utilities/debug.hpp"
38 #include "utilities/formatBuffer.hpp"
39 #include "utilities/globalDefinitions.hpp"
40 #include "utilities/growableArray.hpp"
41
42 const char* HeapRegionRemSet::_state_strings[] = {"Untracked", "Updating", "Complete"};
43 const char* HeapRegionRemSet::_short_state_strings[] = {"UNTRA", "UPDAT", "CMPLT"};
44
45 PerRegionTable* PerRegionTable::alloc(HeapRegion* hr) {
46 PerRegionTable* fl = _free_list;
47 while (fl != NULL) {
48 PerRegionTable* nxt = fl->next();
49 PerRegionTable* res = Atomic::cmpxchg(&_free_list, fl, nxt);
50 if (res == fl) {
51 fl->init(hr, true);
52 return fl;
53 } else {
54 fl = _free_list;
55 }
56 }
57 assert(fl == NULL, "Loop condition.");
58 return new PerRegionTable(hr);
59 }
60
61 PerRegionTable* volatile PerRegionTable::_free_list = NULL;
62
63 size_t OtherRegionsTable::_max_fine_entries = 0;
64 size_t OtherRegionsTable::_mod_max_fine_entries_mask = 0;
65 size_t OtherRegionsTable::_fine_eviction_stride = 0;
66 size_t OtherRegionsTable::_fine_eviction_sample_size = 0;
67
68 OtherRegionsTable::OtherRegionsTable(Mutex* m) :
69 _g1h(G1CollectedHeap::heap()),
|