< prev index next >
src/hotspot/share/gc/g1/g1FromCardCache.hpp
Print this page
rev 50098 : [mq]: 8202842-g1-footprint-regressions
*** 1,7 ****
/*
! * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 29,39 ****
#include "utilities/ostream.hpp"
// G1FromCardCache remembers the most recently processed card on the heap on
// a per-region and per-thread basis.
class G1FromCardCache : public AllStatic {
! private:
// Array of card indices. Indexed by heap region (rows) and thread (columns) to minimize
// thread contention.
// This order minimizes the time to clear all entries for a given region during region
// freeing. I.e. a single clear of a single memory area instead of multiple separate
// accesses with a large stride per region.
--- 29,39 ----
#include "utilities/ostream.hpp"
// G1FromCardCache remembers the most recently processed card on the heap on
// a per-region and per-thread basis.
class G1FromCardCache : public AllStatic {
! private:
// Array of card indices. Indexed by heap region (rows) and thread (columns) to minimize
// thread contention.
// This order minimizes the time to clear all entries for a given region during region
// freeing. I.e. a single clear of a single memory area instead of multiple separate
// accesses with a large stride per region.
*** 47,59 ****
assert(worker_id < _max_workers, "Worker_id %u is larger than maximum %u", worker_id, _max_workers);
assert(region_idx < _max_regions, "Region_idx %u is larger than maximum %u", region_idx, _max_regions);
}
#endif
! public:
! static const uintptr_t InvalidCard = UINTPTR_MAX;
static void clear(uint region_idx);
// Returns true if the given card is in the cache at the given location, or
// replaces the card at that location and returns false.
static bool contains_or_replace(uint worker_id, uint region_idx, uintptr_t card) {
--- 47,62 ----
assert(worker_id < _max_workers, "Worker_id %u is larger than maximum %u", worker_id, _max_workers);
assert(region_idx < _max_regions, "Region_idx %u is larger than maximum %u", region_idx, _max_regions);
}
#endif
! // This card index indicates "no card for that entry" yet. This allows us to use the OS
! // lazy backing of memory with zero-filled pages to avoid initial actual memory use.
! // This means that the heap must not contain card zero.
! static const uintptr_t InvalidCard = 0;
+ public:
static void clear(uint region_idx);
// Returns true if the given card is in the cache at the given location, or
// replaces the card at that location and returns false.
static bool contains_or_replace(uint worker_id, uint region_idx, uintptr_t card) {
< prev index next >