1.OpenJDK应该有的,它是很完整的,它编译器部分,我之前还研究过,是ANTLR的作品。
我相信只是你没有找到。
2. Java.exe是虚拟机嘛,它是不是起线程我不是很确定了。但是你可以研究一下ClassLoader那些知识点。
Load完class,才会执行main。当然了,这些都发生在 字节码和JVM的层面上。
3. 那不是真的,Javac不可能是一个或者几个c文件编译出来的。那个工程可大了。

解决方案 »

  1.   

    @ healer_kx
    1. 那你还记得在什么地方吗?我找了很久都没有找到。
    2. jvm load class,然后执行main函数,这个我知道肯定是正确的,因为一直都是这么用的。class是javac编译出来的,可是据我所知,java编译采用的是自举形式,也就是用java代码来编译java程序,那么相当于javac也是会直接调用com.sun.tools.javac.Main主函数来进行java代码的编译工作。不知道这么理解是不是对的。如果真是这样,那还是c语言直接调用了java程序啊。我知道c可以通过JNI技术来跟java函数进行交互。我是在想,既然c能直接跟java交互,那干嘛还需要class呢。感谢回复。
      

  2.   

    @healer_kx
    1. javac的源代码都在openjdk\langtools\src\share\classes\com\sun\tools\javac
    2.javac.exe是一个包装器,JRE环境下是没有的,它实际上是在运行下面的命令
    java -classpath C:\j2sdk\lib\tools.jar com.sun.tools.javac.Main那我更纠结了,jar里面都是class,class是javac生成的,javac内部调用的又是java****,这不成了死循环?
    暂且不管它是不是死循环,因为编译openjdk的时候,需要安装bootstrap jdk的,tools.jar是bootstrap jdk编译出来的,这个倒也好理解。可是问题来了。那最初的java1.0的tools.jar是谁编译的???高手请作答啊。
      

  3.   

    我的理解: 用class文件而不是直接JNI掉接口使得可以更好的优化JAVA的性能。
    关于javac的问题,第一个JAVAC的CALSS文件完全可以是程序员自己人肉生成的么
      

  4.   

    javac 是编译工具,编译.java文件成clalss文件, java平台只能运行class文件
      

  5.   

    @a12939026。
    没错,class可以是程序员自己生成的。不过我就是想知道真相呀。哈哈哈