丫丫,都是个人见解,个人见解,不负责正确性。
唉,没有心思画图了,否则会形象些。下面模拟的介绍一下一个简单的java程序是怎么run起来的。在介绍这个之前,得说说了你一开始学习java就必须遇到的个实际问题了。就是所谓的JDK和JVM、java文件和class文件和jar文件、等等等等,,,
你先把class文件当机器语言看吧,具体的class文件和机器语言之间的区别在后面的java如何实现跨平台和网络移动性再说吧。现在是在说run一个java程序,也就是,你写好java文件,然后编译成class文件,然后放到JVM上去run就ok了,而你需要做的就是写java文件。如果只在这个层面上的话,那就伤了心了,难道不想知道完完全全的过程么?写代码要有一个信念,就是你所写的都是机器语言。就是你写了一行很简单的代码,它可以run出一个结果,但是你的理解层面要深到机器语言的层面,就是你写的那一行代码是如何经过编译连接后最后成为机器语言,最后如何把指令放到寄存器上去一条一条计算。
JDK,java语言开发的工具包,所谓的工具包,至少要有两个功能,一个是提供一些基础的类库给你用,一个是提供编译功能。一般的工具包都是提供这两个方面的功能,当然后面的编译功能是有很多扩展的,这个你可以到bin目录下去看。这是单纯的JDK,如果你要装一些集成的开发工具的时候,你会发现它会要你为这个工具设置一个JVM,但不需要设置JDK,这是当然的,工具本身都会配带JDK。
JVM,java虚拟机,就这个了,这个算是核心了。也就是上面说过的模拟机器,它模拟了一台物理机器,有它自己的内存等。所以你几乎可以不关注实际的物理机器了。从上面看,这样JVM至少需要一个硬盘一个内存和一堆的寄存器,这样就ok了,硬盘当然是不能模拟的,是物理机器的硬盘,内存模拟是一个什么概念呢?其实没什么神秘的,实际内存当然是借物理机器的,然后提供自身的一个管理模式对这些内存进行管理,这样就是一个模拟内存了(自己想象的),其中的核心是JVM提供的内存管理。寄存器呢?JVM也不用了,用了一个java栈来完成这个工作。这个也告诉了我们,很多的硬件功能是可以用软件来设计完成的。然后JVM完成什么工作呢?和物理机器联系一下,它不就是把class文件当成它的机器语言来run么?具体的细节后面会谈。