《深入理解Java虚拟机》读书笔记1-java简介
Java简介
1、 从机器语言到高级语言
计算机只认识0、1,对应于电路中低电平和高电平。因此,早期程序员使用特定的0、1串操控计算机,从而达到想要的目标效果。这些0、1串就称作指令,也叫机器码(比如0000代加载,000代表寄存器A,000000000000 代表地址为0的存储器,所以0000,0000, 000000000000 代表 LOAD A, 0-把存储器0中的值加载到寄存器A),指令集合即为机器语言。机器语言对计算机友好,但对人类来说直观性就很差了。此外,因为构成不同的计算机处理器的电子元件不同,因此想要达到相同的指令效果,不同品牌的计算机需要的0、1串指令也不同,也就是说一个指令集是和具体的计算机处理器绑定的。
针对0、1串构成的机器语言的复杂性,人们使用助记符和地址符号来减轻困难(比如说用ADD表示加,EAX表示寄存器A),在程序运行的时候,先要由汇编器将符号翻译为机器语言。这样稍微加强了编程语言的可读性。这些符号语言就叫汇编语言,汇编语言虽然相较机器语言可读性稍强,但仍然不够直观,同时它和机器语言一对一翻译过来,也是和特定的计算机绑定的。
机器语言和汇编语言都称为低级语言,与之相对的是高级语言,现在我们常用的java,c,c++,js等都属于高级语言。高级语言的语法和结构更类似人类使用的自然语言,更容易学习、使用,降低开发门槛,提高了开发效率。但计算机并不能理解高级语言,所以在运行时,高级语言需要先翻译为机器码,然后才能被计算机认可。高级语言翻译过程有两种形式,一是逐句翻译为机器码,称为解释;二是先将整个程序翻译为机器码,然后再在机器上执行整份机器码,这种称为编译。高级语言运行过程需要先翻译为机器语言,带来额外的负担,在某些追求性能的场景,这些负担是致命的,所以高级语言并不能完全取代低级语言。使用高级语言还是低级语言就要看具体场景需求了
2、高级语言-平台无关性-java
高级语言虽然更易理解,但有些语言并没有完全和计算机平台解耦。比如c语言,在windows和linux两种操作系统上语法库并不是完全一样的,在编写程序时就需要考虑适用的平台。java是一种高级语言,它具有平台无关性-“一次编写,到处运行”。同一份java代码,可以在不同的计算机系统上运行。这是怎么实现的呢?
Java定义了一种中间文件格式,class类文件。运行时,java代码先编译为class类文件,然后载入特定的虚拟机,由虚拟机再翻译为平台相关的机器语言并执行。这个过程的关键在于不同的虚拟机认识统一格式的class文件,能够将class文件解释为对应平台的机器语言。比如针对一份java代码编译出来的class文件,window版的虚拟机,将class文件解释为window版的机器语言,linux版的虚拟机解释为linux版的机器语言。这样就让程序员编写代码不用考虑平台的因素了。
Java技术体系包括以下几个组成部分:
- l Java程序设计语言
- l 各种硬件平台上的Java虚拟机
- l Class文件格式
- l Java API类库
- l 来自商业机构和开源社区的第三方Java类库
把Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK,JDK是支持Java程序开发的最小环境。把Java API类库中Java SE API子集和Java虚拟机这两部分统称为JRE,JRE是支撑java程序运行的最小环境。