我在这里有点困惑,JVM是表示字节码(生成它)还是只是将编译的.class文件(字节码)加载到内存中?!或者JVM只是用来独立于平台运行字节码的规范?!非常感谢。
发布于 2015-08-14 13:21:45
Java编译器(javac)将人类可读的代码转换为字节码,然后在JVM中运行。
来自oracle文档
程序必须转换成Java能够理解的形式,这样任何具有Java的计算机都可以解释和运行程序。编译Java程序意味着将程序文件中的程序员可读的文本(也称为源代码)转换为字节码,字节码是Java VM的独立于平台的指令。
发布于 2018-04-07 15:07:05
Sun用C编写,Oracle用C++编写
Java编译器javac将源代码转换为字节码。JVM中的JIT编译器和Java解释器将字节码转换为相应的机器代码。
在java中,只有源代码(.java文件)和字节码(.class文件)可用。而且我们不能保存机器代码( .exe文件),因为.exe文件只能在运行时才能形成,并且在程序完全执行时就会从内存中消失。
在我们的系统中,调用了javac.exe(用于编译java源代码,例如: javac HelloWorld.java)和java.exe(用于通过JVM执行java字节码,例如: java HelloWorld),它们仅以.exe格式(javac.exe和java.exe)可用。所以javac.class和JVM不是用Java.If编写的,而是用javac.class和java.class格式编写的。
javac在JDK下而不是在JVM.Remember下,JVM只在运行时才能工作,在将源代码编译成字节代码之前,在将源代码编译到字节Code..but之后才能工作。JVM通过JIT编译器和Java解释器将字节码转换成相应的机器代码。
对于不同的操作系统,Operating提供了不同的JDK和JRE软件,所以JRE和Java.Because都是平台Dependent.So,因此Java.Because编译器和Java编译器都不是用Java.Because语言编写的。
发布于 2015-08-17 21:50:04
当您说javac file时,javac(称为javac)将将您的代码转换为中间形式(字节码)。它不直接将其转换为特定于平台的机器语言,因此您可以将类文件(字节码)提供给任何平台上的任何人。这就是“写一次,在任何地方运行”的工作原理。它不是编译成特定于平台的机器语言,而是编译成一个通用字节码。
当您说java file时,JVM将获取字节码并将其转换成块“动态”(在运行时)并执行它们的本机语言。它使用JIT编译器(这可能是一个混乱的来源,因为这与javac不一样)来实现这一点。顺便说一句,JDK与javac不一样。JDK是一个SDK (软件开发工具包),它包含Java中的所有内容,包括JVM和javac。
https://stackoverflow.com/questions/32011039
复制相似问题