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. 1、Java语言概述与开发环境——Java特性和技术体系平台

    一.Java语言的主要特性 1.Java语言是易学的: Java语言的语法与C语言和C++语言很接近,使得大多数的程序员很容易学习和使用Java. 2.Java语言是强制面向对象的: Java语言提供 ...

  2. 1、Java语言概述与开发环境——编译和运行第一个程序HelloWorld.java

    编写一个Java程序到运行的步骤概述: 1.将Java代码编写到扩展名为.Java的文件中 2.通过Javac命令对该Java文件进行编译 3.通过Java命令对生成的class文件进行运行 一.编写 ...

  3. 一、Java语言概述与开发环境、第一个java程序

    目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...

  4. 疯狂java——第一章 java语言概述与开发环境

    J2ME: 主要用于控制移动设备和信息家电等有限存储的设备. J2SE: 整个java技术的核心和基础,它是J2ME和J2EE编程的基础. J2EE: Java技术中应用最广泛的部分,J2EE提供了企 ...

  5. Java 语言概述与开发环境(1)

    目录: 一.计算机语言的发展史 二.Java语言的简述 三.Java的特点 四.java语言的运行环境及环境变量的配置 五.Dos的常见命令 六.第一个java程序-HelloWord        ...

  6. Java复习(一)——Java语言概述、开发环境、基础知识

    设计模式:在各种应用系统中被大量应用,是设计的“常用套路” 作为Java WEB开发人员,需要掌握HTML/CSS/JS和数据库相关知识 常用的应用程序框架:Spring MVC,Spring Boo ...

  7. java 学习笔记1 java语言概述及开发环境

    高级语言运行机制 高级语言按程序的执行方式分为编译型和解释型两种. java语言比较特殊,Java程序的执行必须经过先编译后解释的步骤. 1 编译生成字节码,只面向JVM(.class) 2Jvm执行 ...

  8. 1、Java语言概述与开发环境——JDK的安装与环境变量的配置

    Selenium.Appium.Macaca.RobotFramework.Jmeter等框架或工具均必须的一样东西——JDK,也就是基于java开发的东西都要这个东西.JDK的概念在这里不作描述. ...

  9. Java 语言概述与开发环境(2)

    目录: 一.JDK配置容易出现的问题 二.HelloWorld程序编译常见问题 三.文档注释 四.Java 标识符 五.转义符 六.运算符之算术运算符   ********************** ...

随机推荐

  1. C/C++中结构体引用中箭头->与点.的区别

    1.作用 ->主要用于类类型的指针访问类的成员,而.运算符,主要用于类类型的对象访问类的成员. 举例: class A { public : int member; } A a; //定义一个结 ...

  2. CDOJ 1073 线段树 单点更新+区间查询 水题

    H - 秋实大哥与线段树 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit S ...

  3. Centos7安装Redis3.X

    本文只是简单搭建Redis,为了整合ELK用,后面会详细写. Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高 ...

  4. React 初试

    小Demo, 后面会进行拓展的 import React from 'react'; import ReactDOM from 'react-dom'; class Welcome extends R ...

  5. 网页设计之js

    1.JavaScript概述 javaScript与ECMAScript的相爱相杀 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组 ...

  6. 容器————unordered_map

    #include < unordered_map > map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此ma ...

  7. Mysql 获取成绩排序后的名次

    其实就是输出mysql的排序后的行号   RT:获取单个用户的成绩在所有用户成绩中的排名   可以分两步: 1.查出所有用户和他们的成绩排名 ) as rowNo from t_user, () ) ...

  8. 微信小程序 API 界面 (2)

    由于每个 API 参数:对象的属性都有 success,fail,complete,所以在这个提前介绍,就不再每个API 上写了 success:类型 函数 接口调用成功的回调函数 fail:类型 函 ...

  9. Python深度学习读书笔记-2.初识神经网络

    MNIST 数据集 包含60 000 张训练图像和10 000 张测试图像,由美国国家标准与技术研究院(National Institute of Standards and Technology,即 ...

  10. Openstack 实现技术分解 (4) 通用技术 — TaskFlow

    目录 目录 前文列表 扩展阅读 简介 基本概念 实现样例 最后 前文列表 Openstack 实现技术分解 (1) 开发环境 - Devstack 部署案例详解 Openstack 实现技术分解 (2 ...