Moh*_*eif 3 java compiler-construction jvm bytecode javac
我在这里有点困惑,JVM是代表字节码(生成它)还是它只是将已编译的.class文件(字节码)加载到内存中?!或者JVM只是以独立于平台的方式运行字节码的规范?!非常感谢你.
小智 5
Sun JVM 是用 C 编写的,Oracle JVM 是用 C++ 编写的
Java 编译器 javac 将源代码转换为字节码。JVM 内部的 JIT Compiler 和 Java Interpreter 将字节码转换为相应的机器码。
在 java 中,只有源代码(.java 文件)和字节码(.class 文件)可用。我们不能保存机器代码(.exe 文件),因为 .exe 文件只能在运行时形成,并在程序完全执行后立即从 RAM 中消失。
在我们的系统中,javac.exe(用于编译java源代码,例如:javac HelloWorld.java)和java.exe(用于JVM执行java字节码,例如:java HelloWorld)都被调用,它们仅在.exe格式中可用(javac.exe 和 java.exe)。因此,Java 编译器 javac 和 JVM 不是用 Java 编写的。如果它们是用 Java 编写的,那么它们可能以 javac.class 和 java.class 格式提供。
javac 属于 JDK 而不是 JVM。请记住,JVM 仅在运行时工作意味着在将源代码编译为字节码之后..但在此之前 javac 将源代码编译为字节码。JVM 通过 JIT Compiler 和 Java Interpreter 将字节码转换为相应的机器码。
对于不同的操作系统,Oracle 公司提供了不同的 JDK 和 JRE 软件;所以JVM(JRE下)和javac编译器(JDK下)都是Platform Dependent。所以可以确定javac Compiler和JVM不是用Java编写的。因为Java语言总是Platform Independent。
| 归档时间: |
|
| 查看次数: |
7574 次 |
| 最近记录: |