These caches can be either manually created with ngen.exe, or automatically created by the jitter, and can function largly as shared libraries do today. This leads to faster startup times for individual applications, and lower memory footprint for a large set of separate tools running at the same time because dependent libraries can be shared.
On a system running several Java applications each in their own address space, each hotspot VM would take up memory with jit compiled versions of all dependent classes and libraries. It's obviously possible for Java to avoid this problem, but MSIL is better designed to avoid it from the start.