The clock and timestamp fields in SoftReference should be declared
volatile. These fields are read or updated by the VM, (possibly)
concurrently with the execution of Java threads.
To be more specific, the timestamp field is read by the GC during
reference discovery, e.g. during G1/CMS concurrent mark. The clock is
updated by the GC, typically after reference processing has completed.
Webrev: http://cr.openjdk.java.net/~pliden/8191859/webrev.0/
Bug: https://bugs.openjdk.java.net/browse/JDK-8191859
/Per