1- that's not how it works: if you read data, you're waiting for the result, and that's the point of ptefetching: you don't wait for it now, and with a bit of luck you don't wait at all
2- if the JVM is doing a decent job, there are few enough extra memory access that the cache isn't full: think of a heap for example, that has more or less predictable reads for the code, but not for the memory subsystem