Compress objects, not cache lines: an object-based compressed memory hierarchy
blog.acolyer.org
blog.acolyer.org
I bet that in some cases using a dedicated memory allocator that takes care that objects that belong together are stored together, can result in execution improvements. If you using the default memory allocator, it could happen you get pieces of memory far from each other, especially if other threads are also allocating memory or because temporary objects (think string manipulations) are created during the construction of the data structure.
Security implications are important though, with programmer nor kernel no longer controlling memory layout.
Initial stages of this are already seen in the various ways of memory interleaving for multiple banks, cores and cpus.
The truly fun part would be speculative as opposed to tracing reordering...