I have a question about the Java Virtual Machine.

Please correct any misunderstandings that I may have.

When you write a java program, it is first compiled using javac and the result
is a .class file which contains the byte code. Now you can run this program
using java <filename.class> and this 'runs' the bytecode file (.class file)
and your program is run.

My question is : where does the Java Virtual Machine feature in this. Is
the java program the JVM that inteprets the byte code and runs the program.
If not then how does the JVM fit in to the whole picture.

Also, can a java program be run interpreted and from an executable. What
are the major differences between these.

Please excuse my ignorance but I am trying to get a conceptual understanding
of Java.

Thanking you for your help,