请问javac编译后的class文件就算是字节码吗,谢谢

请问javac编译后的class文件就算是字节码吗,谢谢

问题描述:

还有就是通过java运行class文件后,编译器还在起作用吗,因为今天看的书上说class文件在运行的时候编译器会扫描字节码

Java字节码的执行需要经过以下3个步骤:

(1)由类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中。在此过程需要检验该类文件是否符合类文件规范。

(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。

(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。

注意:

Java虚拟机采用“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间以外的内存。如果是Applet程序,还不允许访问客户端机器的文件系统。

.class就是字节码
[quote]java运行class文件后,编译器还在起作用吗[/quote]
个人觉得应该不起作用了。
[quote]书上说class文件在运行的时候编译器会扫描字节码[/quote]
class文件通过类加载器后再由字节码校验器,最后经解释器运行输出到硬件。

Java程序执行原理
[url]http://shenhai.iteye.com/blog/64954[/url]

楼主大大是在什么书上看到说编译器会扫描字节码的呢?要具体问题具体分析
楼主大大要区分清楚将Java源代码翻译为字节码的编译器(可以称之为javac),和一些JVM实现的内部将字节码翻译为机器码的编译器(称之为JIT编译器,just-in-time compiler)。后者在运行Java程序的时候是在工作的。
JIT编译器不是JVM必须有的组成部分,而是一些高性能的JVM为了提高运行速度而做的优化实现。

Class文件包含有代码以及支持代码用的元数据(metadata)。代码部分就是字节码,而元数据部分则包括诸如类名、成员名、方法签名、常量池、方法大小、方法的求值栈占用量等许多信息。所以说Class文件包含字节码,但不只有字节码。

java运行class文件后,编译器当然不起作用了,
编译器只是用来把.java文件编译成.class时候起作用的

废话不多说: .class文件是字节码,JRE能运行java程序吧,你到JRE的bin目录下看看有没有javac.exe这个编译器程序就知道了。。