Hi, thanks for a great article. The only thing I wanted to point out is that there is no Soft Reference in Android. I mean there is a class called Soft Reference, but it works exactly the same way as Weak Reference. That is why using Soft Reference for cache is not good idea. It is better to use LRUCache for this.
But again, it is only for Android. For Java they works exactly as you described.