《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制
内容
1、高级语言的运行机制
2、Java 语言的运行机制
1、高级语言的运行机制
高级语言主要分为编译型语言和解释型语言两类。
编译型语言是指使用专门的编译器、针对特定平台(操作系统)将高级语言源代码一次性“翻译”成该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行文件格式,这个转换过程称为编译(Compile)。编译生成的可执行程序可以脱离开发环境,在特定的平台下独立运行。有些还需要链接其他编译好的目标代码
编译型语言是程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++
解释型语言是无需编译,先翻译成中间代码,再由解释器对中间代码进行解释运行。程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率比较低,跨平台性较好。如Ruby、Python
2、Java 语言的运行机制
Java语言比较特殊,由Java语言编写的程序需要经过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成一种平台无关的字节码(也就是*.class文件)。这种字节码必须通过解释器执行。因此,Java程序的执行必须经过先编译,后解释两个步骤,如下图所示

JVM(Java Virtual Machine,Java虚拟机)负责解释执行字节码文件(*.class文件)。Java编译器不面向任何具体平台,只面向JVM。虽然不同平台下JVM是不同的,但它们都面对编译器均提供相同的接口。Java编译器生成的与平台无关的字节码,不能直接在不同的平台上运行,必须通过中间的转换器(JVM)才能运行。
首先Java编译器生成虚拟机能理解的代码(与平台无关的字节码文件),然后虚拟机解释执行这些代码。
JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台下运行。
JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。
Sun公司制定的Java虚拟机规范在技术上规定了JVM统一标准,具体定义了JVM的如下细节:
- 指令集
- 寄存器
- 类文件格式
- 栈
- 垃圾回收堆
- 存储区
Sun公司制定规范的目的是为了提供统一的标准,最终实现Java程序的平台无关性。
《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制的更多相关文章
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings
Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(三)之Everything Is an Object
---恢复内容开始--- Both C++ and Java are hybird languages. A hybird language allow multiple programming st ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十一)之Holding Your Objects
To solve the general programming problem, you need to create any number of objects, anytime, anywher ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects
The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(四)之Operators
At the lowest level, data in Java is manipulated using operators Using Java Operators An operator ta ...
- 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
下压(LIFO)栈:可以动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> imple ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information
Runtime type information (RTTI) allow you to discover and use type information while a program is ru ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions
The ideal time to catch an error is at compile time, before you even try to run the program. However ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十)之Inner Classes
The inner class is a valuable feature because it allows you to group classes that logically belong t ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(九)之Interfaces
Interfaces and abstract classes provide more structured way to separate interface from implementatio ...
随机推荐
- nios II--实验4——按键中断硬件部分
按键中断 硬件开发 新建原理图 1.打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next&g ...
- 可扩展性 Scalability
水平扩展和垂直扩展: Horizontal and vertical scaling Methods of adding more resources for a particular applica ...
- 数据库MongoDB查询语句--持续更新
模糊查询: 包含字符串str : find({'name':/str/i}); {'name':/str/} 以str开头: {'name':/^str/} $in查询: 字段:{ field: ...
- Python基础-函数篇
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数与函数式编程 1.面向对象: 华山派-- ...
- navicat cannot create file 文件名、目录名或卷标语法不正确 解决方法
配置了mycat,用navicat连接8066端口,点击“查询”的时候发现出现报错: 开始以为是mycat的配置有问题,找了好久都没发现错误.根据提示信息进入到相应的目录发现每个连接其实就是一个win ...
- react.js 公共方法 集合
截取七牛上传图片的后缀名: export function getInputKey(info){ let self = this; let obj = JSON.parse(info); let qi ...
- 几种Aop实现及Castle.DynamicProxy的使用
AoP(Aspect Oriented Programming,面向切面编程) .Net平台AOP技术研究 简单实现 通过继承实现 public interface ICoding { void Do ...
- 【ASP.NET Identity系列教程(一)】ASP.NET Identity入门
注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- 概率DP light oj 1030
t组数据 n块黄金 到这里就捡起来 出发点1 到n结束 点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6 如果满6个的话 否则 ...
- 17B
贪心,之前先bfs判断是否联通,然后,反向建图,找一个未选择的点,找与他距离最近的点连边,因为每个点都要被选择,所以一个点离他最近的另一个点肯定也被选择,可以贪心 #include<queue& ...