mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
6916968: CMS: freeList.cpp:304 assert(_allocation_stats.prevSweep() + ..., "Conservation Principle")
Fix assert and adjust demand volume computation by adding missing factor. Reviewed-by: jmasa, tonyp
This commit is contained in:
parent
937d6ded89
commit
45f42598c1
2 changed files with 24 additions and 9 deletions
|
@ -300,8 +300,21 @@ void FreeList::verify_stats() const {
|
||||||
// dictionary for example, this might be the first block and
|
// dictionary for example, this might be the first block and
|
||||||
// in that case there would be no place that we could record
|
// in that case there would be no place that we could record
|
||||||
// the stats (which are kept in the block itself).
|
// the stats (which are kept in the block itself).
|
||||||
assert(_allocation_stats.prevSweep() + _allocation_stats.splitBirths() + 1 // Total Stock + 1
|
assert((_allocation_stats.prevSweep() + _allocation_stats.splitBirths()
|
||||||
>= _allocation_stats.splitDeaths() + (ssize_t)count(), "Conservation Principle");
|
+ _allocation_stats.coalBirths() + 1) // Total Production Stock + 1
|
||||||
|
>= (_allocation_stats.splitDeaths() + _allocation_stats.coalDeaths()
|
||||||
|
+ (ssize_t)count()), // Total Current Stock + depletion
|
||||||
|
err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT
|
||||||
|
" violates Conservation Principle: "
|
||||||
|
"prevSweep(" SIZE_FORMAT ")"
|
||||||
|
" + splitBirths(" SIZE_FORMAT ")"
|
||||||
|
" + coalBirths(" SIZE_FORMAT ") + 1 >= "
|
||||||
|
" splitDeaths(" SIZE_FORMAT ")"
|
||||||
|
" coalDeaths(" SIZE_FORMAT ")"
|
||||||
|
" + count(" SSIZE_FORMAT ")",
|
||||||
|
this, _size, _allocation_stats.prevSweep(), _allocation_stats.splitBirths(),
|
||||||
|
_allocation_stats.splitBirths(), _allocation_stats.splitDeaths(),
|
||||||
|
_allocation_stats.coalDeaths(), count()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FreeList::assert_proper_lock_protection_work() const {
|
void FreeList::assert_proper_lock_protection_work() const {
|
||||||
|
|
|
@ -99,14 +99,16 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC {
|
||||||
// vulnerable to noisy glitches. In such cases, we
|
// vulnerable to noisy glitches. In such cases, we
|
||||||
// ignore the current sample and use currently available
|
// ignore the current sample and use currently available
|
||||||
// historical estimates.
|
// historical estimates.
|
||||||
// XXX NEEDS TO BE FIXED
|
assert(prevSweep() + splitBirths() + coalBirths() // "Total Production Stock"
|
||||||
// assert(prevSweep() + splitBirths() >= splitDeaths() + (ssize_t)count, "Conservation Principle");
|
>= splitDeaths() + coalDeaths() + (ssize_t)count, // "Current stock + depletion"
|
||||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
"Conservation Principle");
|
||||||
// "Total Stock" "Not used at this block size"
|
|
||||||
if (inter_sweep_current > _threshold) {
|
if (inter_sweep_current > _threshold) {
|
||||||
ssize_t demand = prevSweep() - (ssize_t)count + splitBirths() - splitDeaths();
|
ssize_t demand = prevSweep() - (ssize_t)count + splitBirths() + coalBirths()
|
||||||
// XXX NEEDS TO BE FIXED
|
- splitDeaths() - coalDeaths();
|
||||||
// assert(demand >= 0, "Demand should be non-negative");
|
assert(demand >= 0,
|
||||||
|
err_msg("Demand (" SSIZE_FORMAT ") should be non-negative for "
|
||||||
|
PTR_FORMAT " (size=" SIZE_FORMAT ")",
|
||||||
|
demand, this, count));
|
||||||
// Defensive: adjust for imprecision in event counting
|
// Defensive: adjust for imprecision in event counting
|
||||||
if (demand < 0) {
|
if (demand < 0) {
|
||||||
demand = 0;
|
demand = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue