An enlightening post indeed. I do have a question regarding the following paragraph: "The delegation performs an important role in the loading process, when a class loader does not find a given class it delegates to its parent until the class is resolved or an exception is thrown." As per my understanding, a class loader always delegates the search of a given class to its parent and only if the class is not found tries to load it on its own. This I believe is the fundamental paradigm ensuring security. For example, I cannot define a class called java.lang.Object on my own. Even if I do so, the class loaded will always be the Object class belonging JVM's system jars and not my custom class. Refer the following URL http://www.velocityreviews.com/forums/t148335-what-is-the-difference-between-classforname-and-classloaderdefineclass.html post 6 by Chris Smith.