I am relatively new to java, so forgive me if this question might seem "Silly". I know that the JVM (Java Virtual Machine) is contained within the JRE (Java Runtime Environment) but I am not sure if the classloader and Execution Engine are part of the JVM.
Most sources that I have read did not specify this. Instead, when describing the components of the JVM they only discuss the 5 components of the Runtime Data Area (i.e. Heap, JVM Stack, Method Area, PC Registers and Native Method Stack). Although my common sense tells that for it to be a complete Virtual Machine it needs the input, Memory & processing, I still need to verify the exact locations of these components.
Based on Classloader wikipedia there are 3 types of classloaders in JRE:
This class loader, which is part of the core JVM, is written in native code
It is implemented by the sun.misc.Launcher$ExtClassLoader class
This is implemented by the sun.misc.Launcher$AppClassLoader class
So i think in conclusion: first one is in JVM the other 2 is in JRE libraries.
I don't think it is possible to make a clear distinction.
JRE is the name for a kind of Java distribution, which (incidentally) Oracle don't provide anymore.
JVM (Java virtual machine) is a more abstract term. It refers to "a thing that executes Java programs". In practical terms, it consists of a core written in native code and a large amount of Java code. But there is no clear line drawn between the virtual machine and the libraries that support the virtual machine and other that are "part of Java" that the virtual machine runs.
The java.lang.Classloader class is a good example of this. Some of it is written in Java. Other parts are native code methods which are provided by the JVM native code core. All other classloader classes extend the ClassLoader. Some are part of the standard library, and others may come from third party libraries or frameworks, or may be implemented by the application itself.
Then there is the bootstrap classloader which is entirely written in native code, and shares code with the native code methods of ClassLoader.
In short, I don't think it is possible to get a clear answer. And I don't think attempting or succeeding in drawing a hard line around the JVM would actually achieve anything.