工作过一段时间才发现不用"管他是怎么实现的"这些话都是狗p,以下是看 Java虚拟机规范(Java SE 7) 笔记,个人也觉得先看规范在学习深入理解等系列会更容易
第一章简介
jvm:只与特定的二进制文件格式(class)有关联,java硬件无关性与操作系统无关的关键部分
实现:HotSpot,jrockit,ibmJvm等
简单的说,实现jvm只需要正确读取class文件的指令,并正确执行这些指令所蕴含的操作即可
相当的简单的笔记,但有些东西需要参考下
Java虚拟机可以看作是一台抽象的计算机。如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域,那么,
1.计算机是怎么工作的?
小学生问题,不会,不过我知道其他的
计算机三大核心部件:CPU、内部存储器和输入/输出设备
指令集:存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU就可以更高效地运行。
所以jvm因该是模拟计算机的三大核心的工作方式,他的执行就可以是解释器来执行程序,也可以通过把自己的指令集编译为实际CPU的指令来实现,它可以通过微代码来实现,或者甚至直接实现在CPU中。
2.硬件相关性是什么?
首先看一下机器码与字节码
字节码:字节码通常指的是已经经过编译,但与特定机器码无关,需要直译器转译后才能成为机器码的中间代码。字节码通常不像源码一样可以让人阅读,而是编码后 的数值常量、引用、指令等构成的序列。字节码主要为了实现特定软件运行和软件环境、硬件环境无关。字节码的实现方式是通过编译器和虚拟机器。编译器将源码 编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。字节码的典型应用为Java语言。
原生机器码:机器语言是一种指令集的体系。这种指令集,称机器码,是电脑的CPU可直接解读的数据。机器码有时也被称为原生码,这个名词比较强调某种编程语言或库,它与运行平台相关的部份。
看起来是这样的
编译型:程序 --> 机器语言 (直接编译为机器语言)
解释性:程序 --> 字节码 --->机器语言 (根据具体系统在编译为机器语言 增加一个中间层达到平台无关的目的)
这些都是编程语言,可我们在开发的时候还有脚本语言,那么
3.脚本语言又是什么?
脚本语言: 规则+解释器,一般都是以文本形式存在,类似于一种命令,用以回应他人意图
说白了就是脚本语言通过解析器完成,不需要转换成二进制字节,当然性能也会慢一点点
总结:jvm只是一个规范,以后再说jvm原理得先加上在xxx的jvm了。。。