`

002 Java编程语言运行机制

 
阅读更多

JavaSE_02_Java编程语言运行机制

 

1.Java编程语言独特的运行机制 


计算机高级编程语言,按照程序执行的方式来分的话,主要分为两大类型:编译型语言和解释型语言。

1.
编译型:

编译型语言是指使用专门的编译器、针对特定平台(操作系统)将某种高级语言源程序一次性翻译成可被该平台硬件运行的机器码(包括指令和操作数),并包装成该平台的操作系统所能识别和运行的格式。这一过程称为编译。最后生成的程序(可执行文件)可以脱离开发环境在特定平台上独立执行。我们常见的Windows系统中的可执行文件(以.exe为后缀的文件)都是使用编译型高级程序语言进行编写的。有时编译过程结束之后,还可能需要对其它编译好的目标代码模块进行链接,即组装两个以上的目标代码模块生成最终的可执行文件,以实现较低层次上的代码重用。通过这样的方式,就可以在已有代码的基础上进行软件开发,提高了最终开发程序的效率和稳定性。编译型高级语言的程序执行时效率较高,因为它被针对特定的平台一次性编译成机器码、且可以脱离开发环境而独立运行。但编译后生成的目标码文件也就无法再移植到不同的平台上,如要移植则必须修改源程序,或至少针对不同的平台,采用不同的编译器进行重新编译(比如大家都非常熟悉的QQ,就必须针对不同的操作系统,开发不同的客户端版本)。现有的大多数高级语言,如FORTRANCC++、PascalLISP等都是编译型的。

2.
解释型

解释型语言是指使用专门的解释器,将某种高级语言源程序逐条指令的解释成特定平台的机器码指令,并立即执行,解释一句执行一句,这类似于会场中的同声翻译,而不进行整体性的编译和链接处理。解释型语言相当于把编译型语言相对独立的编译和执行过程混合到一起,而且每一次执行时都要重复进行解释,因而执行的效率较低。且不能脱离解释器独自执行。但只要针对不同平台提供相应的解释器,就能方便的实现源程序级的移植,但这是以牺牲程序的执行效率为代价。比如现在最流行的互联网开发语言phprubyPython等,都是解释型语言。它们大都开发效率高于编译型语言,且在更换系统平台时基本不需要进行源代码的修改,就可以正常运行,非常适合互联网软件系统的要求,在当前互联网大热的时代,大行其道。


计算机编程语言发展到现在,已经从最初的机器语言(计算机唯一能够识别的由01组成的代码),经历了汇编、cC++的由低级到高级的发展(这里的低级高级并不是我们通常意义上的高下之分,而是根据计算机编程语言距离计算机硬件的距离而言的),计算机编程语言逐渐的向人类的自然语言靠拢,离机器语言越来越远。但是计算机硬件终究只能识别机器语言,这样,如何让计算机能够识别高级编程语言编写的代码,就成了需要首先解决的问题。


这个问题与不同语言之间的人们如何交流类似。比如程序员使用高级程序语言编程,就像是中国人使用汉语一样。而不同的操作系统是不懂高级程序语言的,比如Windows就像是美国人,只懂英语;Linux是俄罗斯人,只懂俄语。如果我们直接把高级程序语言代码交给操作系统,就像是把一本中文书直接交个美国人或俄国人,它们根本看不懂,当然也就不会按照代码里面的要求去执行计算机指令了。这个时候,就需要对这本中文书进行翻译了。编译型与解释型就像是使用两种不同的翻译方式,让不懂中文的读者来读懂代码。

编译型语言是这么做的,编译器就像是一个译者,首先拿到了原文,然后开始进行翻译,直到全部翻译完成之后,在将译本交给读者,这个时候读者自然能使用自己的母语来读了。当然译本只是另外一种语言,比如英语。如果这时候换了另外一种语言,比如俄语的读者,就必须重新换个俄语翻译者,然后将原文翻译为俄语的译本,这样俄语的读者才能读懂。但是如果翻译完毕后,翻译的译本就可以给所有的英语或者俄语读者来读了,不需要译者进行重复的劳动。但是如果这个时候,原文进行重新编订修改,译本就和原版不同步了,这个时候读者拿到的译本就和原本有了出入,需要译者重新进行翻译,读者得等待新的译本。这就是编译型语言的优缺点举例。


那么解释型语言呢,就像前面说的,需要解释器,就像是同声传译。读者不懂汉语,没关系,找一个专业的同声传译,坐在读者旁边,逐字逐句的翻译给读者听。如果这个时候原本发生了变化,只要将原本交给译者,直接翻译给读者的就是最新版本,或者又来了一个俄语读者,那么只要找个俄语同声传译(找个俄语的解释器),同声传译就行了,读者不需要进行等待,这点相比编译型是有优势的。但是它的缺点也很明显,同声传译给这个读者翻译完了,又来了一个新的读者,即使译者刚刚给一个英语读者翻译完,来的还是一个英语读者,译者还得重复一次,这个就是解释型语言的缺点,效率是比较低的。每次都得重复一次译者劳动。所以一般来说,程序的编译效率和执行效率存在互斥关系、此消则彼长、难以同时达到最优。

那么Java是怎么做的呢?它是编译型语言呢,还是解释型语言?

答案是:都不是。

Java
的独特的运行机制,在当时看来也算是一个创新,即使是现在,主流计算机编程语言中,也只有.Net平台采用了类似的机制,并且实现的效果也不如Java。那么Java的运行机制独特在哪里呢?它是解释型与编译型结合型的。如何结合的?下面来详细说明一下。

首先,Java的源代码在编写好之后,先采用通用的Java编译器对源代码进行编译,但是编译的结果并不是针对某一种具体的操作系统平台,比如C语言针对Windows平台编译好的exe可执行文件,而是一种叫做字节码的文件。字节码的文件内容相对于高级程序语言的源代码来说,更接近计算机机器语言,但是它并不是真正的编译好的机器语言,而仍然是与平台无关的,编译的结果针对的是一种称之为Java虚拟机(JVM—-Java Virtual Machine)的虚拟计算机技术。

JVM
按照统一的标准来读取分析字节码文件,然后就像是解释型语言的解释器一样,将字节码指令翻译为具体的某操作系统平台的机器指令,然后去执行指令。

虽然JVM也是解释执行的,当相比于解释型语言,它不是直接解释执行源代码,而是经过处理后的字节码文件,将字节码文件解释为该JVM针对的特定平台的机器指令。这样解释执行的效率要远高于其他解释型语言(比如最常见的web开发,Jsp的运行效率是php10倍以上)。并且JVM解释字节码的标准都是一样的,这样Java源代码就不需要针对不同的JVM(或者操作系统平台)重新进行编译或者改写,实现了像解释型语言那样,非常容易的实现了跨平台运行。

通过这种结合型的运行机制,Java既实现了跨平台运行,同时还是高效的跨平台运行。
这样看来,JVMJava独特的运行机制中,起着举足轻重的作用,我们下一篇内容就来详细讲解JVM——Java虚拟机。


2.Java
语言运行机制基础——JVM 


Java
引进Java虚拟机技术,针对不同的平台,完全由软件模拟或由软件和硬件共同模拟,实现一台虚拟的计算机。在Java中引入了虚拟机的概念,即在机器和编译器之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译器一个共同的接口。编译器只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来执行。在一些JVM实现中,还可能会将虚拟机代码转换为特定系统的机器码执行,以提高执行的效率。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。 


可以说,Java虚拟机是Java语言的基础。它是Java技术的重要组成部分。Java虚拟机是一个抽象的计算机,和实际的计算机一样,它具有一个指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。Java解释器负责将字节代码翻译成特定机器的机器代码。

Sun
公司制定的Java虚拟机规范在技术上规定了JVM的统一标准,具体定义了JVM的下述细节:

指令集(中央处理器[CPU])
寄存器
类文件格式

垃圾收集堆
存储区


制定这些的目的是为了提供一种统一的编译Java源代码的规范,最终实现Java软件的平台无关性。因为编译生成的字节码文件是针对JVM的,是平台无关的。接下来,任何不同的时间或场合下,都可以在JVM上采用Java运行时解释器解释执行该字节码文件,也就是由JVM将字节码指令解释为特定平台的机器码指令并执行。在这一过程中,JVM起到翻译的作用,针对不同平台,开发不同的JVM就好比多个翻译将一份某种语言的作品分别翻译成不同的语言版本,达到信息交流的目的。




3.Java
语言运行机制深入——JREJDK 
Java
运行时环境(Java Runtime Environment)提供了Java的运行环境。它主要由三部分组成:类加载器(class loader)、字节码校验器(bytecode verifier)以及运行时执行引擎(Java Runtime Execution Engine)组成。它们完成不同的功能:类加载器负责从一输入流加载Java字节代码;字节码校验器分析与Java类对应的字节代码流并验证字节代码流符合为该类定义的Java语言规范;而Java运行时执行引擎执行由类加载器加载的并由字节码校验器校验后的字节码。

Java
开发包(Java SE Development Kit)是Sun提供的一套用于开发的Java应用程序的开发包,它提供了编译、运行Java程序所需的各种资源,包括Java编译器、JVMJava运行时环境、以及常用的Java应用程序编程接口(API—-Application Programming Interface,常用Java类库)。它通常包括如下内容:

l         Java
虚拟机(JVM);
l         Java
运行时环境(JRE);
l         Java
编译器:javac,可以通过执行这个命令来将Java源程序编译成可执行的字节码代码class文件;
l         Java
运行时解释器:java,可以通过这个命令来执行编译好的字节码class文件;
l         Java
应用程序编程接口:API,提供了大量的应用编程接口。可以使用这些应用编程接口来缩短开发时间,提高开发效率;
l         Java
文档化工具:javadoc,用于从java源文件中提取符合javadoc规范的注释来生成HTML格式的帮助文件;
l        
其它工具及资源:如用于程序打包的jar等。

-----------------------------------------------------------------------------------------------------------------------------
Java SE
Java StandardEdition  标准版
Java ME: Java Micro Edition  
微型版
Java EE
Java EnterpriseEdition  企业版
 
Java
的基础,学完之后有两个发展方向,java ME java EE
 
Java
Sun公司推出
Sun
公司是一个纯高科技公司,但是由于市场营销经营不善连年亏损,因此于
2009
0420日被甲骨文以74亿美金收购收购。
 
J2SE
J2MEJ2EE
 
目前,Java 2平台有3个版本:它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform MicroEditionJava ME)、适用


于桌面系统的Java 2平台标准版(Java 2 Platform StandardEditionJava SE)、适用于创建服务器应用程序和服务的Java 2平台企业


版(Java 2 Platform EnterpriseEditionJava EE)。
 
JDK
Java DevelopmentKit
java
开发包,是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。
 
JRE
Java RuntimeEnvironment
java
运行环境,运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
 
JDK
包含了JREJRE只能运行不能编译。
 
Jdk 1.4, jdk 1.5(5.0), jdk 1.6(6.0)
jdk 1.7 (jdk 7) 最新版本
没有JDK4.0 
为什么JDK1.5 JDK 5.0 是一样的呢?
因为JDK1.5JDK 1.4相比,有很多新的更新,为了能表示后者的新特性,把原来定位JDK1.5的说法换成了JDK 5.0.
jdk 1.5(5.0)
:别名:Tiger,老虎
jdk 1.6(6.0)
:别名:Mustang,野马
 
1.      
下载JDK
2.      
安装JDK
3.      
设定环境变量(可以是用户变量,也可以是系统变量),指向JDK安装目录中的bin目录
Path = C:\ProgramFiles\Java\jdk1.6.0_25\bin
在运行里输入:
Calc  
启动计算器
Wordpad  
记事板
Notepad  
记事本
4.      
通过运行,输入cmd打开命令行窗口,输入java –version,显示出Java版本信息
装完后,进入目录可以看到:
JDK目录bin下有java.exe javac.exe两个文件
JRE 目录bin 下只有 java.exe 文件
接下来就可以编写Java程序了。
 
可以直接使用windows记事本来编写Java程序,也可以使用EditplusUltraEdit等高级文本编辑工具编写Java程序,还可以使用专业的IDE


Integrated DevelopmentEnvironment)编写。
 
编辑器介绍:
 
Windows: notepad
(记事本), editplus,ultraedit, gvim(类似于linux下的vi
Linux: vi, vim
vi增强版), gedit
Mac
Emacs
 
第一节课,我们使用记事本实现一个Hello WorldJava程序。
[HelloWorld.java]
所有的Java代码,其后缀都是以java结尾。
 
Java
程序的执行过程分为两步:
1.      
编译
2.      
执行
 
Class
文件是字节码文件,程序最终执行的就是这个字节码(bytecode)文件。
编译命令:java HelloWorld.java
执行命令:java HelloWorld(注意,HelloWorld后面没有.class
Java
编译,即javac后面跟的是文件名。但java执行,即java后面跟的不一定是文件名,而是包含MAIN方法的那个类的名字。
 
Java
是跨平台的语言,真正执行的不是二进制代码,而是字节码。
 
JVM
Java Virtual MachineJava虚拟机):是用C语言写的。
 
Java
是跨平台的,而JVM不是跨平台的(JVM是由C语言编写的)
 
Java
之所以能够做到跨平台,本质原因在于JVM不是跨平台的。

 

 

分享到:
评论

相关推荐

    java的运行机制

    了解Java的运行机制,能够更好的帮你理解Java语言

    Java程序设计基础:使用命令行方式开发Java程序.pptx

    Java程序的运行机制 了解Java程序的运行机制 掌握使用命令行方式开发Java程序的步骤 Java程序的运行机制 编写源程序 编译源程序 由Java解释器解释运行 字节码文件 命令行方式开发Java程序的步骤 1.用记事本编写Java...

    Java语言程序设计实验指导书

    1 Java运行环境 通过在不同环境编译运行一个Java编程环境,认识Java程序结构。 2 Java语言基本语法 编写程序,练习使用Java控制结构,实现循环嵌套与选择嵌套等复杂结构。 3 对象和类 编写程序实现类和对象的操作...

    《Java语言程序设计》实验报告.zip

    《Java语言程序设计》是计算机专业的主要选修课 实验一 Java开发环境。实验二 Java基本语法。实验三 类与对象的设计。实验四 类的继承性与多态性。实验五 接口与包。实验六 异常处理。实验七 图形用户界面设计。实验...

    Java程序设计基础:使用Eclipse创建和运行Java程序.pptx

    Java程序的运行机制 了解常用的集成开发环境 掌握使用Eclipse创建和运行Java程序 集成开发环境 集成开发环境(Integrated Development Environment,IDE)将编写、编译、解释、运行等都集成在一起,大大提高了程序员的...

    java语言程序设计基础,java语言开发入门及环境配置

    了解java语言的起源与发展历程 了解java语言的运行机制 掌握java语言开发环境配置 掌握java语言程序的基本结构

    Java零基础 - Java语言特性简介.md

    本文档介绍了Java语言的一些基本特性和常见用法,并附带了一个简单的Java示例代码。 ...另外,建议您在阅读过程中结合实践,尝试编写并运行示例代码,加深对Java语言特性的理解,并提升编程能力。

    java课件Java语言发展简史

    1、Java语言发展简史 ...3、Java程序运行机制 4、SDK的下载安装及环境变量配置 5、第一个手写java程序 6、如何在dos下手动运行 7、eclipse的下载安装及环境变量配置 8、第一个eclipse编写的java程序

    C++和java作为编程语言的区别解析,用C++开发益智游戏代码的过程说明.docx

    C++和Java是两种非常流行的编程语言,它们之间有很多区别。在本文中,我们将讨论C++和Java之间的主要区别,并举例说明它们在开发代码方面的不同之处。 首先,C++是一种编译语言,而Java是一种解释语言。这意味着C++...

    尚硅谷_java基础_java语言概述

    1.1 基础常识 1.2 Java语言概述 1.3 Java程序运行机制 1.4 Java语言环境的搭建 1.5 开发体验 — HelloWorld 1.6 小结第一个程序 1.7 常见问题及解决方法 1.8 注释

    java技术学习文档.docx

    Java基础知识 Java是一种面向对象的编程语言,它支持封装、继承和多态等面向...JDK是Java编程语言的开发工具包,包括Java编译器、Java调试器等工具。JVM是Java程序的运行环境,它可以将Java字节码转换为机器码并执行。

    Java语言的反射机制.rar

    这种动态获取类的信息,以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。Java 反射机制主要提供了以下功能: l 在运行时判断任意一个对象所属的类; l 在运行时构造任意一个类的对象; l ...

    Java清华教程.rar

     ■ Java Applet程序设计,Applet程序的特点,运行机制,与浏览器的集成,安全机制的使用;  ■ 多线程程序设计,进程和线程的联系和区别,多线程程序设计的一般方法,线程的生命周期,线程状态的控制,多线程的...

    JAVA面试题,Java是一种面向对象的编程语言,由Sun Microsystems公司(现属Oracle公司)于1995年推出

    答:Java是一种面向对象的编程语言,由Sun Microsystems公司(现属Oracle公司)于1995年推出。它具有简单、对象 oriented、分布式、多线程、动态、 Architecture neutral、高度可移植、安全等特点。 2. 什么是JVM? 答...

    Java 虚拟机学习笔记:Java 内存区域,垃圾收集,内存分配与回收策略,JVM 调优,文件结构,类加载机制,Java 程序

    Java编程语言的语法类似于C++,但是相比C++更简洁和易于理解。它采用了“一次编写,到处运行”的原则,即一次编写的程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。JVM是Java的核心组成部分,它...

    JAVA 开发实战经典视频 + 课件 + 源码

    第1部分 Java基础程序设计 第1章 Java概述及开发环境搭建 2 视频讲解:35分钟 1.1 认识Java 2 1.1.1 什么是Java 2 1.1.2 Java语言的特点 3 1.1.3 Java程序的运行机制和Java虚拟机 5 1.2 Java开发环境搭建 6 1.2.1 ...

    CS 自学指南(Java编程语言、数据库、数据结构与算法、计算机组成原理、操作系统、计算机网络、英语、简历、面试).zip

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司于1995年5月正式发布。它的设计目标是“一次编写,到处运行(Write Once, Run Anywhere)”,这意味着开发者可以使用Java编写应用程序,并在支持...

    Java编程艺术 PDF

    Herbert Schildt 和James Holmes两位编程大师通过将Java应用于某些有趣、实用的计算机问题和编程任务中,全面展示了Java语言的强大功能、敏捷性、多样性和艺术性。本书各章内容分别涉及到Java精髓、递归下降的表达式...

    Java基础_Java 语言概述

    1.1 基础常识 • 1.2 Java语言概述 • 1.3 Java程序运行机制 • 1.4 Java语言环境的搭建 • 1.5 开发体验— HelloWorld • 1.6 小结第一个程序 • 1.7 常见问题及解决方法 • 1.8 注释

    01-JavaSE-JAVA运行原理.ppt

    Java是由Sun公司推出的Java程序设计语言和Java软件开发平台的总称。有一个庞大的库,库中包含很多可重用的代码和提供安全性、可移植性以及可自动垃圾回收等服务的执行环境。 JAVA特点: 简单性:摒弃了C++中易...

Global site tag (gtag.js) - Google Analytics