JVM 学习笔记 I

来源:互联网 发布:mac 10.10升级10.12 编辑:程序博客网 时间:2024/06/16 04:21

了解JVM之前…


JVM即Java 虚拟机(Java virtual machine),是运行Java程序的底层基础。

运行程序的底层基础是硬件、机器。计算机是构建在二进制 0 1 之上的,为什么这么说,因为物理中,二值逻辑是比较好表达的(电平高低,电压有无,磁极磁性都有两种状态),每个物理元件(可以简单理解为组成计算机的最小单位物理组件)可以看做能够表示两个物理状态的小装置,而这两个物理状态,就可以被我们抽象化,0 和 1。这样无数个组件有机组合,就可以进行复杂的电平表示和组合,也就可以被我们抽象成四则运算(这部分理论知识可以参见数字电子技术基础)。

计算机本质也就是一台进行0/1表示计算的复杂机器

对于这样的机器,普罗大众是无法使用的,因此需要一个中介,在用户和计算机之间做一个桥梁,使用户能够操纵计算机而不需要明白具体的物理实现,也使计算机能够理解用户的思维,用二进制计算来满足复杂的用户需求。

这个中介,就是操作系统

简而言之,操作系统将计算机的各部分器件进行组织,为用户提供了具体的接口,让用户进行简单的操作就能够完成特定的功能,不需要知道计算机是如何做的。有了操作系统,计算机底层结构对用户来说是透明的,不可见。

操作系统是依靠指令(一条指令由多条微指令构成,一条微指令由多条微命令组成,一条微命令由一段微程序构成,微程序来对底层硬件进行具体操作)对计算机硬件进行操作的,不同的操作系统有不同的指令。

我们常用的编程语言,经过如下步骤可以完成具体功能:

  1. 程序编写
  2. 程序编译(也就是把编程语言比如c翻译成机器能够理解的语言比如汇编)
  3. 程序运行(把编译后的机器能够理解的指令放到机器的特定位置运行)

其中,第一步由程序员完成,第二步由编译器完成,第三步由操作系统完成(如上所述)。

那么,平常所说的跨平台性是什么呢?有了上述三个步骤,可以看到。对于任何编程语言,第一步都是一样的。第二步、第三步就不同了。

  1. 我们可以用不同的编译器对同一个语言进行编译,编译出来的结果可能各有不同(调用了各个平台的组件库等)在不同操作系统上运行。如c/c++就是这样的,称为“一次编写,到处编译”。例如,gcc编译器广泛应用于类Unix操作系统,而Microsoft的visual studio则使用cl.exe编译器。
  2. 也可以用同一编译器编译,编译结果不直接由具体操作系统执行,而是借助一个中介来执行,这个中介就是JVM。JVM之于操作系统,就像是操作系统之于底层硬件。不同的底层硬件,经过操作系统的抽象组织能对上层提供统一接口。而不同的操作系统,经过JVM的抽象组织,能对Java程序员提供统一的编程接口。称为“一次编译,到处执行”。而这个特殊的编译器由JDK提供,编译后的结果也不是汇编或者机器语言,而是Java字节码(.class文件中的内容),字节码直接运行在JVM上,JVM把字节码解释为具体平台上的机器指令,因而实现了Java平台无关。
0 0
原创粉丝点击