提交 d67c3523 编写于 作者: Y ysr

6916968: CMS: freeList.cpp:304 assert(_allocation_stats.prevSweep() + ...,...

6916968: CMS: freeList.cpp:304 assert(_allocation_stats.prevSweep() + ..., "Conservation Principle")
Summary: Fix assert and adjust demand volume computation by adding missing factor.
Reviewed-by: jmasa, tonyp
上级 b8fe0ca1
...@@ -300,8 +300,21 @@ void FreeList::verify_stats() const { ...@@ -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 { ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册