Java虚拟机规范(Java SE 7)笔记

工作过一段时间才发现不用"管他是怎么实现的"这些话都是狗p,以下是看 Java虚拟机规范(Java SE 7) 笔记和思考,个人也觉得先看规范在学习深入理解等系列会更容易,节约篇幅具体定义不抄了

第一章简介

 jvm:只与特定的二进制文件格式(class)有关联,java硬件无关性与操作系统无关的关键部分

 实现:HotSpot,jrockit,ibmJvm等

 简单的说,实现jvm只需要正确读取class文件的指令,并正确执行这些指令所蕴含的操作即可

就三条,标准的基础教材,但相关的东西很多

1.硬件相关性是什么?

首先看一下机器码与字节码:

字节码:字节码通常指的是已经经过编译,但与特定机器码无关,需要直译器转译后才能成为机器码的中间代码。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。字节码主要为了实现特定软件运行和软件环境、硬件环境无关。字节码的实现方式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。字节码的典型应用为Java语言。

原生机器码:机器语言是一种指令集的体系。这种指令集,称机器码,是电脑的CPU可直接解读的数据。机器码有时也被称为原生码,这个名词比较强调某种编程语言或库,它与运行平台相关的部份。

说白了电子计算机通过电子信号的有无(0/1)进行操作,其中在cpu有一个区域可以用不同的信号控制其他的信号即指令集(参考《编程奥妙》)

不过这么解释好像又有问题

2.原生机器码又怎么进行运行?

我暂时理解为完全由Cpu和操作系统实现,不同的cpu处理机制不一样,操作系统依赖这些机制且,且需要对机器码规范进行实现,至于机器码规范我没找到,这是我杜撰出来的,等我看完cpu原理在解释

总之看了简介之后就可以一眼看出java的优势(这种图到处都是)
编译型:程序    -->    机器语言                         直接编译为机器语言
解释性:程序    -->    字节码     --->机器语言     根据具体系统在编译为机器语言
增加一个中间层达到平台无关的目的, 操作平台上的机器语言又是一套规范

这些都是编程语言,可我们在开发的时候还有脚本语言,那么

3.脚本语言又是什么?

脚本语言: 规则+解释器,一般都是以文本形式存在,类似于一种命令,用以回应他人意图

说白了就是 脚本语言(文本)-->解析器    而解析器可以由程序语言编写(javascript:v8/c++ ,rhino/java...)

 

第二章java虚拟机结构

1.数据类型

种类:原始类型和引用类型

作用:变量赋值、参数传递、方法返回和运算操作

区别:原始类型的值不需要通过特殊标记或别的额外识别手段来在运行期确定它们的实际数据类型,也无需刻意将它们与引用类型的值区分开来,虚拟机的字节码指令本身就可以确定它的指令操作数的类型是什么,所以可以利用这种特性即可直接确定操作数的数值类型(每条指令具有专属操作类型)

其他:编译器应当在编译期间尽最大努力完成可能的类型检查,使得虚拟机在运行期间无需进行这些操作。

1.1原始类型与值

种类:数值(整数,浮点),布尔,returnAddress

boolean:编译后为int/type

returnAddress:finally相关,忘记它

1.float表示范围为什么比int大?

参照  IEEE 754  规范  (说实话,刚工作的时候我从来没想过这个问题)

其中

2.整数内容的提升?

xx

1.2引用类型与值

种类:类类型(Class Types)、数组类型(Array Types)和接口类型(Interface Types)

均由相关类型动态创建

数组类型:数组类型还包含一个单一维度(即长度不由其类型决定)的组件类型(Component Type),一个数组的组件类型也可以是数组。但从任意一个数组开始,如果发现其组件类型也是数组类型的话,继续重复取这个数组的组件类型,这样操作不断执行,最终一定可以遇到组件类型不是数组的情况,这时就把这种类型成为数组类型的元素类型(Element Type)。数组的元素类型必须是原始类型、类类型或者接口类型之中的一种。(多维数组的解释)

2.运行时数据区

PC寄存器:程序计数器 

Java虚拟机规范(Java SE 7)笔记

上一篇:Transcation And Lock--存储过程中使用事务的模板


下一篇:Ajax学习