I understand how to use Dynamic Proxies in Java but what I don't understand is how the VM actually creates a dynamic proxy. Does it generate bytecode and load it? Or something else? Thanks.
I suggest that you read Dynamic Proxy Classes:
The Proxy.getProxyClass method returns the java.lang.Class object for a proxy class given a class loader and an array of interfaces. The proxy class will be defined in the specified class loader and will implement all of the supplied interfaces. If a proxy class for the same permutation of interfaces has already been defined in the class loader, then the existing proxy class will be returned; otherwise, a proxy class for those interfaces will be generated dynamically and defined in the class loader. [emphasis mine]
At least for Sun's implementation, if you look at the source code of java.lang.reflect.Proxy
you'll see that yes, it generates the byte code on-the-fly (using the class sun.misc.ProxyGenerator
).