有这样几个术语概念:java源文件,,字节码文件,编译器,JVM虚拟机,类加载器,内存,javac.exe,java.exe。
刚学java时,在CMD中执行java命令时老师就引述了上面的几个概念:
输入 javac Demo.java 就将java源文件转换成字节码文件(Demo.class),再输入java Demo 就启动了JVM来执行当前字节码文件中的内容。后面又引出了编译器的概念,将java源文件转换成字节码文件就是一个编译的过程;在内存中画图展示了JVM执行时数据传递的过程。再后来又提到了类加载器,加载到内存中执行程序的。
我现在有几个疑问:javac.exe就是编译器吗?如果不是,它和编译器之间如何相互作用?java.exe只是启动JVM吗?还有别的作用吗?类加载器是在编译器运行之后才运行的吗?是在JVM运行前运行的吗?为什么?JVM为运行前到底存在哪?运行时又存在哪?
新手提问,希望高手解答详细,最好有代码引证,有图表示真相!超级感谢!
|