Well, good news. I just had UtilCacheTests.testExpire fail on me. Since I'm the one who created that test, I'm the most qualified to fix it.
Unfortunately, the test itself attempts to use all memory, so that UtilCache will attempt to expire all soft references. Sometimes, that doesn't work. I might have to do something hackish, by seeing how much total memory is available, allocating 40% of that into a soft-reference cache, then multiple objects of 15%, stored locally(there-by they are hard-references), then seeing if that clears the item. But it's all still a bit racy.