25
25
#include " precompiled.hpp"
26
26
#include " gc/shared/cardTable.hpp"
27
27
#include " gc/shared/collectedHeap.hpp"
28
+ #include " gc/shared/gcLogPrecious.hpp"
29
+ #include " gc/shared/gc_globals.hpp"
28
30
#include " gc/shared/space.inline.hpp"
29
31
#include " logging/log.hpp"
30
32
#include " memory/virtualspace.hpp"
31
33
#include " runtime/java.hpp"
32
34
#include " runtime/os.hpp"
33
35
#include " services/memTracker.hpp"
34
36
#include " utilities/align.hpp"
37
+ #if INCLUDE_PARALLELGC
38
+ #include " gc/parallel/objectStartArray.hpp"
39
+ #endif
40
+
41
+ uint CardTable::card_shift = 0 ;
42
+ uint CardTable::card_size = 0 ;
43
+ uint CardTable::card_size_in_words = 0 ;
44
+
45
+ void CardTable::initialize_card_size () {
46
+ assert (UseG1GC || UseParallelGC || UseSerialGC,
47
+ " Initialize card size should only be called by card based collectors." );
48
+
49
+ card_size = GCCardSizeInBytes;
50
+ card_shift = log2i_exact (card_size);
51
+ card_size_in_words = card_size / sizeof (HeapWord);
52
+
53
+ // Set blockOffsetTable size based on card table entry size
54
+ BOTConstants::initialize_bot_size (card_shift);
55
+
56
+ #if INCLUDE_PARALLELGC
57
+ // Set ObjectStartArray block size based on card table entry size
58
+ ObjectStartArray::initialize_block_size (card_shift);
59
+ #endif
60
+
61
+ log_info_p (gc, init)(" CardTable entry size: " UINT32_FORMAT, card_size);
62
+ }
35
63
36
64
size_t CardTable::compute_byte_map_size () {
37
65
assert (_guard_index == cards_required (_whole_heap.word_size ()) - 1 ,
@@ -56,8 +84,6 @@ CardTable::CardTable(MemRegion whole_heap) :
56
84
{
57
85
assert ((uintptr_t (_whole_heap.start ()) & (card_size - 1 )) == 0 , " heap must start at card boundary" );
58
86
assert ((uintptr_t (_whole_heap.end ()) & (card_size - 1 )) == 0 , " heap must end at card boundary" );
59
-
60
- assert (card_size <= 512 , " card_size must be less than 512" ); // why?
61
87
}
62
88
63
89
CardTable::~CardTable () {
@@ -428,7 +454,8 @@ MemRegion CardTable::dirty_card_range_after_reset(MemRegion mr,
428
454
}
429
455
430
456
uintx CardTable::ct_max_alignment_constraint () {
431
- return card_size * os::vm_page_size ();
457
+ // Calculate maximum alignment using GCCardSizeInBytes as card_size hasn't been set yet
458
+ return GCCardSizeInBytes * os::vm_page_size ();
432
459
}
433
460
434
461
void CardTable::verify_guard () {
1 commit comments
openjdk-notifier[bot] commentedon Nov 20, 2021
Review
Issues