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 标识符 五.转义符 六.运算符之算术运算符 ********************** ...
随机推荐
- Redis 历史版本下载URL
Redis 历史版本下载URL: http://download.redis.io/releases/ Redis和RedisClient 官网下载方式: https://blog.51cto.com ...
- 对ECMAScript的研究-----------引用
ECMAScript 新特性与标准提案 一:ES 模块 第一个要介绍的 ES 模块,由于历史上 JavaScript 没有提供模块系统,在远古时期我们常用多个 script 标签将代码进行人工隔离.但 ...
- react项目导出数据怎么做?
做项目遇到导出数据,搜索了一个插件,简直太好用,几行代码就可以搞定. 插件是react-csv, 了解详细介绍大家可以去https://www.npmjs.com/package/react-csv
- 【方法】原生js实现方法ajax封装
/* 参数说明* type[String] 请求方式('POST'或'GET') 默认设置'GET'方式* dataType[String] 获取到的后台数据格式 默认'JSON'格式* async[ ...
- POJ 1236 学校传数据 强连通+缩点+DAG
题意描述: 网络中有一些学校,每个学校可以分发软件给其他学校.可以向哪个分发取决于他们各自维护的一个清单. 两个问题 1:至少要copy多少份新软件给那些学校, 才能使得每个学校都能得到. 2:要在所 ...
- POJ 2289 多重二分匹配+二分 模板
题意:在通讯录中有N个人,每个人能可能属于多个group,现要将这些人分组m组,设各组中的最大人数为max,求出该最小的最大值 下面用的是朴素的查找,核心代码find_path复杂度是VE的,不过据说 ...
- 综合KPI报表历史明细数据查询
一.综合计划部KPI明细数据查询--xigu用户要求:需显示第三季度,即789三个月的明细数据解决方法:1.查看SSISC:\Users\Administrator\Documents\Visual ...
- 自定义input上传图片组件
自定义input上传图片组件,美化样式 前段时间因为项目需求,做过一个上传图片组件,这里分享下大致思路,希望对有需要的童鞋有所帮助~~~ 功能需求:1.上传图片限制大小.分辨率.类型 2.上传图片支持 ...
- 阶段3 1.Mybatis_08.动态SQL_03.mybatis中动态sql语句-foreach和sql标签
foreach标签 in的查询 sql语句好写,但是传参在映射文件里面改怎么传呢 定义一个List<Integer>成员变量,然后生成get和set 定义一个新的查询方法 open:开始符 ...
- 程序的内存分布 - 以 Linux 为例,基于 C 语言分析
这里以 Linux 为例,用 C 语言进行演示. 内存模型 - 内存空间名称 内容 读写操作 分配时机 高地址 kernel 内核空间 命令行参数.环境变量等 不可读写 程序运行时 - stack 栈 ...