我的Java Web之路 - Java基础(1) - 程序和进程

介绍

首先,得声明一下,虽然自己从事码农这一职业好多年,但从来没觉得自己认认真真沉下心来好好学习、掌握、理解一门技术,之前做的一直是C/C++,也是在别人的代码里面修修补补中度过,可以说只是懂得C/C++的皮毛而已。

刚好在一年多以前因为公司项目需要才转的Java,这次打算给自己设定一个目标,就是要好好学习、掌握、理解Java和Java Web相关的技术,同时把这个过程用文章记录下来,所以文章中出现各种大量低级的高级的错误在所难免,还请各位看官见谅加指点。不过我发现写文章也能加深对技术的印象和理解,也会促使你更多的思考。

好了,闲话少絮。上篇搭建了最基础的Java开发环境-JDK。其实JDK里的内容真的很丰富,包括各种工具各种库,不过还是先不要一下子涉及太多,咱一步一步来(如果真感兴趣的话可以到官方文档看看介绍)。在开发之前,先探究一下Java程序是怎么执行的。

开发流程

回想一下上篇的第一个Java程序 - HelloWorld,主要经过了以下几个步骤:

  1. 用记事本编写HelloWorld.java,这就是编写Java源码了;
  2. 使用Java编译器javac将Java源码转换为Java字节码文件HelloWorld.class;
  3. 使用Java执行器java启动JVM,JVM寻找HelloWorld类对应的Java字节码文件HelloWorld.class并加载进来,转换为机器码并交给CPU执行。

这三步可以总结成三个词:编辑、编译、执行。

我们可以思考一下,编辑的结果是一个个源代码文件,都是最普通的文本文件而已,一般会保存在磁盘上,这样就不会丢失了,下次打开还能对它进行修改和维护。

编译的结果是一个个字节码文件,这些文件用记事本打开都是乱码,说明不是文本文件,但JVM肯定能理解就对了。这些文件一般也会保存在磁盘上,这样就不用每次执行都得先编译啊。

执行的结果好像不太明显,什么东西都没有见着啊。其实也不是,至少你在命令行控制台界面上看到了“Hello world!”的输出。本质上是操作系统的命令行工具调用了java这个执行器,就是将它先交给CPU执行,结果就是运行JVM(就是执行JVM代码),JVM会寻找命令行参数指定类对应的字节码文件,从磁盘里面读到内存里面来,转换成机器码,交给CPU执行。

操作系统、程序、进程

从上面的流程可以看出,程序(或者软件)及其转换的中间产物(对Java来说是字节码文件)都是存储在磁盘上的,是死的,没有生命的(从运行的角度看,废话,你不运行它当然就没有生命了;但从开发的角度看是有生命的,就是说你刚开始编写它的时候,它就诞生了啊。。。);要想让它变的有生命,就要交给CPU去执行。

那由谁来把它交给CPU去执行啊?当然是你了,因为是你在命令行工具里敲了命令才让它执行起来的,又是废话。。。

问题是,CPU就只有一个(那是以前了,现在的计算机都是好多个CPU),为什么执行一个程序的同时还能执行其他很多程序啊?比如,我能一边用记事本程序写程序,还能一边听音乐播放程序播放的歌啊。

奥妙就在于CPU执行程序的速度很快很快,就像光速那么快,快到即使交替着执行多个程序,人类也会感觉它们像在同时被CPU执行一样。那么问题又来了,既然多个程序要交替着被CPU执行,那哪个先被执行哪个被后执行啊,执行多长时间后要换下个程序呢?答案就是人们发明了时分操作系统(早期的操作系统是顺序执行程序的)来管理这些事情。

操作系统其实也是一个程序或者软件,也要被CPU执行,执行它的时候,它就会决定下一个要被执行的是哪个程序、从哪条指令开始执行、本次执行多长时间、指令存放在哪里。它会把程序的一次执行过程记录下来,这种记录就是进程。就是说进程里记录的数据是程序的一次执行涉及到的各种数据。

当然,操作系统肯定最先被CPU执行,并且会一直被CPU交替执行着(否则的话就是你没开机,那以前没有操作系统的时候是怎么执行程序的?这个先不追究了,反正现在没有操作系统的计算机已经很少见了)。操作系统就像一个大管家,通过进程来管理着各个程序的执行。

进程进程,就是程序的进行。

JVM进程

既然如此,那我是不是可以同时执行很多次HelloWorld程序啊,这样就代表了很多次执行,就可以看到很多个进程了?当然可以啊,只不过我们的HelloWorld程序执行的很快而且输出“Hello world!”后就结束了,基本上你还来不及看到对应的进程它就消失了。就是说程序执行结束了,进程也就消失了,从这个角度看,进程是活的,是有生命的。

实际上,因为Java程序都是在JVM里面的执行的,JVM就像一个容器一样。因此,每次执行Java程序,都会先执行JVM,习惯上就会说起了一个JVM进程。

总结

  • Java程序开发流程是:编辑、编译、执行;
  • 程序是死的,操作系统会为程序的一次执行描述为一个进程,进程是活的;
  • 程序的执行流程是:操作系统先将程序从磁盘读出来放到内存中,操作系统为该次执行创建一个进程,操作系统为该进程分配CPU时间,CPU从内存取出程序的指令和数据并执行;
  • Java程序的执行是在JVM进程里面;
  • 操作系统也是一个程序,JVM也是一个程序;
  • 为什么要有JVM?我想一个主要原因是为了跨平台吧,这样你编译好的class文件就可以直接拷贝到安装有JVM的机器上去执行了,不需要再重新编译了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值