In general, classes are loaded the first time other code tries to use them. That's called "lazy loading" and it's the normal way for Java to do things. It's possible that there might be special circumstances under which a customized class-loader loads classes before they are actually used (that's called "eager loading") but I'm not familiar with any such circumstances. And as for reflection, it works the normal way, i.e. if your reflection-based code asks to load a class, then it will load that class if it hasn't already been loaded. I find it difficult to comprehend how you could write a JVM to load a class early on the grounds that it might be used later by reflection-based code.
As for where loaded classes are stored, um... They are stored in memory like anything else. I'm not sure what you were trying to ask there.