20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_G1CARDLIVEDATA_HPP
26 #define SHARE_VM_GC_G1_G1CARDLIVEDATA_HPP
27
28 #include "gc/g1/g1CollectedHeap.hpp"
29 #include "utilities/bitMap.hpp"
30 #include "utilities/globalDefinitions.hpp"
31
32 class G1CollectedHeap;
33 class G1CMBitMap;
34 class WorkGang;
35
36 // Information about object liveness on the Java heap on a "card" basis.
37 // Can be used for various purposes, like as remembered set for completely
38 // coarsened remembered sets, scrubbing remembered sets or estimating liveness.
39 // This information is created as part of the concurrent marking cycle.
40 class G1CardLiveData VALUE_OBJ_CLASS_SPEC {
41 friend class G1CardLiveDataHelper;
42 friend class G1VerifyCardLiveDataTask;
43 private:
44 typedef BitMap::bm_word_t bm_word_t;
45 // Store some additional information about the covered area to be able to test.
46 size_t _max_capacity;
47 size_t _cards_per_region;
48
49 // Regions may be reclaimed while concurrently creating live data (e.g. due to humongous
50 // eager reclaim). This results in wrong live data for these regions at the end.
51 // So we need to somehow detect these regions, and during live data finalization completely
52 // recreate their information.
53 // This _gc_timestamp_at_create tracks the global timestamp when live data creation
54 // has started. Any regions with a higher time stamp have been cleared after that
55 // point in time, and need re-finalization.
56 // Unsynchronized access to this variable is okay, since this value is only set during a
57 // concurrent phase, and read only at the Cleanup safepoint. I.e. there is always
58 // full memory synchronization inbetween.
59 uint _gc_timestamp_at_create;
60 // The per-card liveness bitmap.
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_GC_G1_G1CARDLIVEDATA_HPP
26 #define SHARE_VM_GC_G1_G1CARDLIVEDATA_HPP
27
28 #include "gc/g1/g1CollectedHeap.hpp"
29 #include "utilities/bitMap.hpp"
30 #include "utilities/globalDefinitions.hpp"
31
32 class G1CollectedHeap;
33 class G1CMBitMap;
34 class WorkGang;
35
36 // Information about object liveness on the Java heap on a "card" basis.
37 // Can be used for various purposes, like as remembered set for completely
38 // coarsened remembered sets, scrubbing remembered sets or estimating liveness.
39 // This information is created as part of the concurrent marking cycle.
40 class G1CardLiveData {
41 friend class G1CardLiveDataHelper;
42 friend class G1VerifyCardLiveDataTask;
43 private:
44 typedef BitMap::bm_word_t bm_word_t;
45 // Store some additional information about the covered area to be able to test.
46 size_t _max_capacity;
47 size_t _cards_per_region;
48
49 // Regions may be reclaimed while concurrently creating live data (e.g. due to humongous
50 // eager reclaim). This results in wrong live data for these regions at the end.
51 // So we need to somehow detect these regions, and during live data finalization completely
52 // recreate their information.
53 // This _gc_timestamp_at_create tracks the global timestamp when live data creation
54 // has started. Any regions with a higher time stamp have been cleared after that
55 // point in time, and need re-finalization.
56 // Unsynchronized access to this variable is okay, since this value is only set during a
57 // concurrent phase, and read only at the Cleanup safepoint. I.e. there is always
58 // full memory synchronization inbetween.
59 uint _gc_timestamp_at_create;
60 // The per-card liveness bitmap.
|