首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM是生成字节码还是运行字节码?

JVM是生成字节码还是运行字节码?
EN

Stack Overflow用户
提问于 2015-08-14 13:16:34
回答 9查看 15.2K关注 0票数 6

我在这里有点困惑,JVM是表示字节码(生成它)还是只是将编译的.class文件(字节码)加载到内存中?!或者JVM只是用来独立于平台运行字节码的规范?!非常感谢。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-08-14 13:21:45

Java编译器(javac)将人类可读的代码转换为字节码,然后在JVM中运行。

来自oracle文档

程序必须转换成Java能够理解的形式,这样任何具有Java的计算机都可以解释和运行程序。编译Java程序意味着将程序文件中的程序员可读的文本(也称为源代码)转换为字节码,字节码是Java VM的独立于平台的指令。

票数 7
EN

Stack Overflow用户

发布于 2018-04-07 15:07:05

  1. JVM = JIT编译器+ Java解释器+垃圾收集器
  2. JRE = JVM +库类
  3. JDK = JRE +开发工具

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语言编写的。

票数 12
EN

Stack Overflow用户

发布于 2015-08-17 21:50:04

当您说javac file时,javac(称为javac)将将您的代码转换为中间形式(字节码)。它不直接将其转换为特定于平台的机器语言,因此您可以将类文件(字节码)提供给任何平台上的任何人。这就是“写一次,在任何地方运行”的工作原理。它不是编译成特定于平台的机器语言,而是编译成一个通用字节码。

当您说java file时,JVM将获取字节码并将其转换成块“动态”(在运行时)并执行它们的本机语言。它使用JIT编译器(这可能是一个混乱的来源,因为这与javac不一样)来实现这一点。顺便说一句,JDK与javac不一样。JDK是一个SDK (软件开发工具包),它包含Java中的所有内容,包括JVM和javac。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32011039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档