mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
Added new product ObjectAlignmentInBytes flag to control object alignment. Reviewed-by: twisti, ysr, iveresov
This commit is contained in:
parent
05b4f2e796
commit
cc18a50e59
29 changed files with 222 additions and 136 deletions
|
@ -32,6 +32,23 @@
|
|||
// highest ranked free list lock rank
|
||||
int CompactibleFreeListSpace::_lockRank = Mutex::leaf + 3;
|
||||
|
||||
// Defaults are 0 so things will break badly if incorrectly initialized.
|
||||
int CompactibleFreeListSpace::IndexSetStart = 0;
|
||||
int CompactibleFreeListSpace::IndexSetStride = 0;
|
||||
|
||||
size_t MinChunkSize = 0;
|
||||
|
||||
void CompactibleFreeListSpace::set_cms_values() {
|
||||
// Set CMS global values
|
||||
assert(MinChunkSize == 0, "already set");
|
||||
#define numQuanta(x,y) ((x+y-1)/y)
|
||||
MinChunkSize = numQuanta(sizeof(FreeChunk), MinObjAlignmentInBytes) * MinObjAlignment;
|
||||
|
||||
assert(IndexSetStart == 0 && IndexSetStride == 0, "already set");
|
||||
IndexSetStart = MinObjAlignment;
|
||||
IndexSetStride = MinObjAlignment;
|
||||
}
|
||||
|
||||
// Constructor
|
||||
CompactibleFreeListSpace::CompactibleFreeListSpace(BlockOffsetSharedArray* bs,
|
||||
MemRegion mr, bool use_adaptive_freelists,
|
||||
|
@ -302,7 +319,7 @@ size_t CompactibleFreeListSpace::sumIndexedFreeListArrayReturnedBytes() {
|
|||
|
||||
size_t CompactibleFreeListSpace::totalCountInIndexedFreeLists() const {
|
||||
size_t count = 0;
|
||||
for (int i = MinChunkSize; i < IndexSetSize; i++) {
|
||||
for (int i = (int)MinChunkSize; i < IndexSetSize; i++) {
|
||||
debug_only(
|
||||
ssize_t total_list_count = 0;
|
||||
for (FreeChunk* fc = _indexedFreeList[i].head(); fc != NULL;
|
||||
|
|
|
@ -91,10 +91,10 @@ class CompactibleFreeListSpace: public CompactibleSpace {
|
|||
enum SomeConstants {
|
||||
SmallForLinearAlloc = 16, // size < this then use _sLAB
|
||||
SmallForDictionary = 257, // size < this then use _indexedFreeList
|
||||
IndexSetSize = SmallForDictionary, // keep this odd-sized
|
||||
IndexSetStart = MinObjAlignment,
|
||||
IndexSetStride = MinObjAlignment
|
||||
IndexSetSize = SmallForDictionary // keep this odd-sized
|
||||
};
|
||||
static int IndexSetStart;
|
||||
static int IndexSetStride;
|
||||
|
||||
private:
|
||||
enum FitStrategyOptions {
|
||||
|
@ -278,6 +278,9 @@ class CompactibleFreeListSpace: public CompactibleSpace {
|
|||
HeapWord* nearLargestChunk() const { return _nearLargestChunk; }
|
||||
void set_nearLargestChunk(HeapWord* v) { _nearLargestChunk = v; }
|
||||
|
||||
// Set CMS global values
|
||||
static void set_cms_values();
|
||||
|
||||
// Return the free chunk at the end of the space. If no such
|
||||
// chunk exists, return NULL.
|
||||
FreeChunk* find_chunk_at_end();
|
||||
|
|
|
@ -159,7 +159,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration(
|
|||
CardTableRS* ct, bool use_adaptive_freelists,
|
||||
FreeBlockDictionary::DictionaryChoice dictionaryChoice) :
|
||||
CardGeneration(rs, initial_byte_size, level, ct),
|
||||
_dilatation_factor(((double)MinChunkSize)/((double)(oopDesc::header_size()))),
|
||||
_dilatation_factor(((double)MinChunkSize)/((double)(CollectedHeap::min_fill_size()))),
|
||||
_debug_collection_type(Concurrent_collection_type)
|
||||
{
|
||||
HeapWord* bottom = (HeapWord*) _virtual_space.low();
|
||||
|
@ -222,7 +222,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration(
|
|||
// promoting generation, we'll instead just use the mimimum
|
||||
// object size (which today is a header's worth of space);
|
||||
// note that all arithmetic is in units of HeapWords.
|
||||
assert(MinChunkSize >= oopDesc::header_size(), "just checking");
|
||||
assert(MinChunkSize >= CollectedHeap::min_fill_size(), "just checking");
|
||||
assert(_dilatation_factor >= 1.0, "from previous assert");
|
||||
}
|
||||
|
||||
|
|
|
@ -133,9 +133,5 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC {
|
|||
void print_on(outputStream* st);
|
||||
};
|
||||
|
||||
// Alignment helpers etc.
|
||||
#define numQuanta(x,y) ((x+y-1)/y)
|
||||
enum AlignmentConstants {
|
||||
MinChunkSize = numQuanta(sizeof(FreeChunk), MinObjAlignmentInBytes) * MinObjAlignment
|
||||
};
|
||||
extern size_t MinChunkSize;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue