The file optimization for the IndexedDiskCache creates a duplicate of the cache file. In deployments with large volumes of data this doubling of disk usage can be problematic. If this could be done inside the single file, it would be easier on the disk.
Additionally, OutOfMemoryErrors are common due to the deserializing and reserializing of the objects in the cache. Given the the size in bytes of each object in the file is known (it's part of the record), the objects could be moved in the file without recreating an instance of the object in memory. The use of a single buffer for reading and then writing the data (to either the same file or a new one) would be much more efficient for handling this optimization.