Cache miss heuristics and preloading techniques for general-purpose programs