1、Java语言概述与开发环境——Java程序运行机制
Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤。
一、高级语言的运行机制
计算机高级语言按程序的执行方式可以分为编译型和解释型两种 。
1.1 编译型语言
编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻译"成可被该平 台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译 CCompile ) 。 编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行 。
有些程序编译结束后,还可能需要对其他编译好的目标代码进行链接,即组装两个以上的目标代码模块生成最终的可执行性程序,通过这种方式实现低层次的代码复用 。
优点:因为编译型语言是一次性地编译成机器码,所以可以脱离开发环境独立运行,而且通常运行效率较高 ;
缺点:因为编译型语 言 的程序被编译成特定平台上的机器码,因此编译生成的可执行性程序通常无法移植到其他平台上运行;如果需要移植,则必须将源代码复制到特定平台上,针对特定平台进行修改,至少也需要采用特定平台上的编译器重新编译 。
现有的 C、 C++、 Objective-C、 Swift、 Kotlin 等高级语言都属于编译型语言。
1.2 解释型语言
解释型语言是指使用专门的解释器对程序逐行进行解释成特定平台的机器码并立即执行的语言。解释型语言不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言的编译和解释过程混合到一起同时完成。
优点:跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可 。 解释型语言可以方便地实现源程序级的移植,但这是以牺牲程序执行效率为代价 。
缺点:每次执行解释型语言 的程序都需要进行一次编译,因此解释型语言 的程序运行效率通常较低,而且不能脱离解释器独立运行 。
现有的JavaScript、Ruby、Python等语言都是属于解释型语言。
二、Java程序的运行机制
Java语言两种核心机制:
java虚拟机(Java Vertal Machine),JVM
垃圾回收机制(Garbage Collection),GC
2.1 Java虚拟机
Java 语言比较特殊,由 Java 语言编写的程序需要经过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(也就是*.class 文件) 。 当然,这种字节码不是可执行的,必须使用 Java 解释器来解释执行 。 因此可以认为 : Java 语言既是编译型语言 ,也是解释型语言。或者说, Java 语言既不是纯粹的编译型语言,也不是纯粹的解释型语言 。 Java 程序的执行过程必须经过先编译、后解释两个步骤,如图 所示 。


Java 语言里负责解释执行字节码文件的是 Java 虚拟机,即 JVM( Java Virtual Machine) 。JVM是可运行 Java 字节码文件的虚拟计算机。所有平台上的 JVM向编译器提供相同的编程接口 , 而编译器只需要面向虚拟机,生成虚拟机能理解的代码 , 然后由虚拟机来解释执行 。 在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行 , 从而提高执行效率。

当使用 Java 编译器编译 Java 程序时,生成的是与平台无关的字节码 , 这些字节码不面向任何具体平台,只面向 JVM。 不同平台上的 JVM 都是不同的,但它们都提供了相同的接口 。 JVM是 Java 程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的 Java 字节码就可以在该平台上运行 。 显然,相同的宇节码程序需要在不同的平台上运行,这几乎是"不可能的",只有通过中间的转换器才可以实现,JVM就是这个转换器 。
JVM 是一个抽象的计算机 , 和实际的计算机一样,它具有指令集并使用不同的存储区域 。 它负责执行指令,还要管理数据、内存和寄存器 。
2.2 垃圾回收机制
对于不再使用的内存应回收——垃圾回收:
在C和C++等语言,由程序员负责回收无应用的内存。
Java语言消除了程序员回收无用内存的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放哪些可被释放的内存空间。
垃圾回收在Java程序运行过程中,自动进行,程序员无法精确控制和干预。
1、Java语言概述与开发环境——Java程序运行机制的更多相关文章
- 1、Java语言概述与开发环境——Java特性和技术体系平台
一.Java语言的主要特性 1.Java语言是易学的: Java语言的语法与C语言和C++语言很接近,使得大多数的程序员很容易学习和使用Java. 2.Java语言是强制面向对象的: Java语言提供 ...
- 1、Java语言概述与开发环境——编译和运行第一个程序HelloWorld.java
编写一个Java程序到运行的步骤概述: 1.将Java代码编写到扩展名为.Java的文件中 2.通过Javac命令对该Java文件进行编译 3.通过Java命令对生成的class文件进行运行 一.编写 ...
- 一、Java语言概述与开发环境、第一个java程序
目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...
- 疯狂java——第一章 java语言概述与开发环境
J2ME: 主要用于控制移动设备和信息家电等有限存储的设备. J2SE: 整个java技术的核心和基础,它是J2ME和J2EE编程的基础. J2EE: Java技术中应用最广泛的部分,J2EE提供了企 ...
- Java 语言概述与开发环境(1)
目录: 一.计算机语言的发展史 二.Java语言的简述 三.Java的特点 四.java语言的运行环境及环境变量的配置 五.Dos的常见命令 六.第一个java程序-HelloWord ...
- Java复习(一)——Java语言概述、开发环境、基础知识
设计模式:在各种应用系统中被大量应用,是设计的“常用套路” 作为Java WEB开发人员,需要掌握HTML/CSS/JS和数据库相关知识 常用的应用程序框架:Spring MVC,Spring Boo ...
- java 学习笔记1 java语言概述及开发环境
高级语言运行机制 高级语言按程序的执行方式分为编译型和解释型两种. java语言比较特殊,Java程序的执行必须经过先编译后解释的步骤. 1 编译生成字节码,只面向JVM(.class) 2Jvm执行 ...
- 1、Java语言概述与开发环境——JDK的安装与环境变量的配置
Selenium.Appium.Macaca.RobotFramework.Jmeter等框架或工具均必须的一样东西——JDK,也就是基于java开发的东西都要这个东西.JDK的概念在这里不作描述. ...
- Java 语言概述与开发环境(2)
目录: 一.JDK配置容易出现的问题 二.HelloWorld程序编译常见问题 三.文档注释 四.Java 标识符 五.转义符 六.运算符之算术运算符 ********************** ...
随机推荐
- docker-compose命令及yaml文件
Docker-compose常用命令 docker-compose up -d nginx 构建建启动nignx容器 docker-compose exec nginx bash 登录到nginx容器 ...
- SpringApplication.run 做了哪些事?
SpringApplication.run一共做了两件事,分别是 创建SpringApplication对象 利用创建好的SpringApplication对象,调用run方法论 结论: 面试官: 我 ...
- (55)Linux驱动开发之一驱动概述
驱动 ...
- UOJ #395 BZOJ 5417 Luogu P4770 [NOI2018]你的名字 (后缀自动机、线段树合并)
NOI2019考前做NOI2018题.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=5417 (luogu) http ...
- AtCoder AGC001F Wide Swap (线段树、拓扑排序)
题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_f 题解: 先变成排列的逆,要求\(1\)的位置最小,其次\(2\)的位置最小,依次排下去( ...
- java复制项目中的补丁,完整的包路径
package com.bytter.audit.iface.util; import java.io.BufferedInputStream; import java.io.BufferedOutp ...
- JS中集合对象(Array、Map、Set)及类数组对象的使用与对比(转载)
在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型,Array ...
- 误用 Kotlin 中的 sortedWith() 方法排序,集合没有变化
时间:2019年8月4日14:17:06问题描述:看下边的小例子: data class Man(val name: String, val age: Int, val type: Int) fun ...
- C# 前台和后台POST提交信息的实现方法
一.系统A(官网)与系统B(第三方支付平台)数据交换的方式 1.1 页面浏览器方式:系统A以构造Form表单的方式,通过系统A客户的浏览器重定向到系统B(向系统B发送请求),B系统完成交易后,将交易 ...
- legend3---阿里云如何多个域名指向同一个网站
legend3---阿里云如何多个域名指向同一个网站 一.总结 一句话总结: 先寻求资料及文档,没有找到的话自己摸索一下就好 结论:多个域名都需要备案 二.阿里云如何多个域名指向同一个网站 当前情况 ...