Test appears to pass fine with G1. But it fails with other GCs, for example 
Parallel, Shenandoah, etc, it fails:


$ CONF=linux-x86_64-server-fastdebug make test 
TEST=java/io/ObjectStreamClass/ObjectStreamClassCaching.java 
TEST_VM_OPTS="-XX:+UseParallelGC"

test ObjectStreamClassCaching.testCacheReleaseUnderMemoryPressure(): success
test ObjectStreamClassCaching.testCachingEffectiveness(): failure
java.lang.AssertionError: Cache lost entry although memory was not under 
pressure expected [false] but found [true]
        at org.testng.Assert.fail(Assert.java:99)
        at org.testng.Assert.failNotEquals(Assert.java:1037)
        at org.testng.Assert.assertFalse(Assert.java:67)


I believe this is because `System.gc()` is not that reliable about what happens 
with weak references. As seen with other GCs, they can clear the weakrefs on 
Full GC. In fact, the test fails with G1 if we do a second System.gc() in this 
test. So the test itself is flaky. The fix is to avoid doing `System.gc()` 
altogether in that subtest. The test is still retained to see that reference is 
not cleared for a while.

Additional testing:
 - [x] Linux x86_64 fastdebug, affected test with `-XX:+UseSerialGC`, 100 
repetitions
 - [x] Linux x86_64 fastdebug, affected test with `-XX:+UseParallelGC`, 100 
repetitions
 - [x] Linux x86_64 fastdebug, affected test with `-XX:+UseG1GC`, 100 
repetitions
 - [x] Linux x86_64 fastdebug, affected test with `-XX:+UseShenandoahGC`, 100 
repetitions
 - [x] Linux x86_64 fastdebug, affected test with `-XX:+UseZGC`, 100 repetitions

-------------

Commit messages:
 - Fix

Changes: https://git.openjdk.org/jdk/pull/9533/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9533&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8283276
  Stats: 2 lines in 1 file changed: 0 ins; 1 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/9533.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9533/head:pull/9533

PR: https://git.openjdk.org/jdk/pull/9533

Reply via email to