Request for review: 6976528 (vs) - PS: assert(!limit_exceeded || softrefs_clear) failed: Should have been cleared

Jon Masamitsu jon.masamitsu at oracle.com
Mon Mar 4 14:49:36 PST 2013


The assertion was intended to verify that soft references would
always be cleared before an out-of-memory is thrown.  There
is actually code that guarantees that (the soft references
have been cleared before an out-of-memory is thrown) and
this assertion is superfluous.

6976528: PS: assert(!limit_exceeded || softrefs_clear) failed: Should 
have been cleared

http://cr.openjdk.java.net/~jmasa/6976528/webrev.00/

The assertion failed in some circumstance and after looking at
the code paths I decided there were too many paths for it to be
obvious that the assertion should hold so I deleted the assertion.

Thanks.

Jon

If you prefer the diffs here they are (2 deleted lines).

diff --git a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp

--- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp

+++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp

@@ -409,7 +409,7 @@

          // heap remains parsable.

          const bool limit_exceeded = size_policy()->gc_overhead_limit_exceeded();

          const bool softrefs_clear = collector_policy()->all_soft_refs_clear();

-        assert(!limit_exceeded || softrefs_clear, "Should have been cleared");

+

          if (limit_exceeded&&  softrefs_clear) {

            *gc_overhead_limit_was_exceeded = true;

            size_policy()->set_gc_overhead_limit_exceeded(false);

diff --git a/src/share/vm/memory/collectorPolicy.cpp b/src/share/vm/memory/collectorPolicy.cpp

--- a/src/share/vm/memory/collectorPolicy.cpp

+++ b/src/share/vm/memory/collectorPolicy.cpp

@@ -620,7 +620,7 @@

        const bool limit_exceeded = size_policy()->gc_overhead_limit_exceeded();

        const bool softrefs_clear = all_soft_refs_clear();

-      assert(!limit_exceeded || softrefs_clear, "Should have been cleared");

+

        if (limit_exceeded&&  softrefs_clear) {

          *gc_overhead_limit_was_exceeded = true;

          size_policy()->set_gc_overhead_limit_exceeded(false);




More information about the hotspot-gc-dev mailing list