现在的位置: 首页 > 综合 > 正文

java编译

2013年10月09日 ⁄ 综合 ⁄ 共 678字 ⁄ 字号 评论关闭

Javac

首先javac将代码编译成字节码, .class文件。

如果一个.java文件中有多个class(当然了,只能有一个public class),则会产生多个.class文件,而且是以class的名字命名的。
我们通常会把.class文件打成jar包。之后jar包可以在任何一个操作系统运行。
其实.class文件的可读性仍然很高,也就是说字节码文件的内容和java代码差别不是很大。因为java很容易被反编译。

Java

将jar包放到我们希望运行的机器上。该机器已经安装了这个操作系统对应的JVM,因此java解释器(Java interpreter)知道应该将字节码文件翻译成什么样的机器码:
The Java interpreter is responsible for finding, loading, and interpreting these files.
使用java,启动JVM,同时解释这些字节码,然后运行程序。

为什么要编译
1,如果直接从高级语言到机器码则太慢。但是也有工具可以一次完成这个过程。
2,编译和运行分离,所以java程序才拥有了在各个平台运行的能力。如大家所知,打好的jar包可以放到任何一个安装了JVM的机器上运行。

同时对于java翻译完成的机器码,据说比c语言的多。例如同样的事情,最终c需要5条机器指令完成,而java最后形成的机器指令是8条。
这也是为什么说c的效率比java高。

同时java将字节码翻译成机器码的过程是比较耗资源的。因此hotspot JVM在heap中有了一个区域code cache。该区域存储了最常被调用的机器码,从而提高效率。

抱歉!评论已关闭.