您的位置:首页 > 编程语言 > Java开发

java代码从输入到输出的整个过程

2008-07-26 10:38 309 查看
一直以来都想着,能用一篇完整的文章,来去描述一个计算机过程.而这个过程,能概括平生所说到的任何计算知识.

在大学期间曾经学过C/C++,汇编,计算机组成原理,微机原理与接口技术,计算机系统结构,操作系统,编译原理,数据库技术,而后是JAVA等等.如何把它们串联起来,形成一个知识体系?

一切都得从实际出发,没有人愿意一上来就看到长篇的理论知识!于是,我选择了一个可执行的java代码来开始这个过程之旅.

非常简单的一个java源代码:
package com.onlyer.test;

public final class TestClass {

private int id = 1234567;

public void test() {
id++;
}

public int getId() {
return this.id;
}

public static void main(String[] args) {
TestClass test = new TestClass();
test.test();
System.out.println(test.getId());
}

}[code]
TODO:解释这段java代码.

一. 编译过程

当然,我们首先得把这个java编译成class文件,假设我们使用的是java内置的编译工具来进行编译,定位到正确的路径,然后在命令提示符里输入:
javac com.onlyer.test.TestClass
一人完整的编译器编译的是源代码,输出的是目标代码。一个完整的编译过程包括对源代码进行词法分析,语法分析,语义分析,源代码优化,中间代码生成,目标代码优化,最终产生能被机器所识别的目标代码。

而javac的编译过程显然没有包括所有的阶段,我们可以简单地分析下。微机只能识别自己定义机器指令,比如IA32有自己的指令系统。操作系统能把代码都解释成这些微机的机器指令,再由CPU执行。目标代码的定义是能直接为操作系统所识别的代码,也就是说,目标代码是跟操作系统绑定的。而java能够跨平台,java class能为不同的操作系统所识别,它必定不可能是目标代码,不然就必定存在多个版本的java class了。事实上,把java class定义在中间代码阶段,是实现跨平台的基础。当然,java class也不是说能直接被操作系统识别,确切来说是能被JVM识别,JVM就是一个虚拟机器,有虚拟CPU,输入输出等设备,注意,是虚拟的。java class再被JVM调用操作系统API,生成JVM指令,JVM指令经过JVM解释成操作系统能识别的代码,再转化成指令到真正的微机去执行。从这个过程来说,中间代码的运行效率当然是比不上目标代码的运行效率的。

二. 运行过程


一) java虚拟机的启动过程(java.exe进程的产生)

二)在多线程操作系统中线程的产生

三) java class在虚拟机的运行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: