After more playing, it seems like the ObjectDefaultTimeout and ObjectDefaultLastAccessTimeout don't really play a part unless the cache reaches the MaxObjects.
However, I'm still having issues trying to figure out how the algorithms work.
I've got a cache pool set up w/LRU. If I set my MaxObjects to 3 and write code to put 4 items, none of the items ever end up in the cache--even though I'm adding each item w/a different Timeout and Idle Timeout. Every call to the page ends up w/only cache misses--where I'd expect the 3 items w/the highest timeouts to stay in the cache.
I'm attaching a screenshot of what I'm talking about. The 2-5 execution times show the grabbing of each item and whether it came out of cache or not. It doesn't matter how many times I call this page, every single item is always a miss--unless I reduce the number of items I load below the MaxObjects threshold. You can see from the highlighted Performance field that I have 28 misses--because I've reloaded this page 7 times.
Shouldn't some of these items be kept in cache?
Also, one strange behavior I noticed. If I initially cache 3 objects, everything works fine. When I add a 4th item to retrieve, the first time I run the page, only the 4th (new) item isn't in cache (which I'd expect.) However, each subsequent call removes the last item from the cache. So, the 2nd time I run the page, the 3rd & 4th item aren't retrieved from cache. The 3rd time I run the page, the 2nd, 3rd & 4th item aren't in cache. The 4th time (and any other time) I run the page none of the items come from the cache. This certainly seems like the incorrect behavior.