⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java02_03.htm

📁 JAVA的课件
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>JAVA语言教程</title>
</head>

<body background="Bg.gif">

<p align="center">&nbsp;<font size="5"><b>2.3 </b></font><b><font size="5">JAVA的运行环境与虚拟机</font></b></p>     
     
<p>&nbsp;&nbsp;&nbsp;      
几乎所有的语言都是需要通过编译或者解释才可以被电脑执行。可是Java有一点不同,它同时需要这两个过程。其实,也正是因为这个原因才使Java这种语言具有了平台无关性。当您写好了一个Java程序的时候(当然这个时候您并不用真的会写Java程序)。首先,通过一段翻译程序将它编译成一种叫做字节码的中间代码。然后再由java平台的解释器将它翻译成为机器语言来执行----平台的核心叫做JVM(Java虚拟机)。</p>     
<p>&nbsp;&nbsp;&nbsp; 让我们来具体看看Java平台的核心JVM的具体结构。为了让编译产生的字节码可以更好的解释与执行,一共把JVM分成了主要的6块:JVM解释器,指令系统,寄存器,栈,存储区,碎片回收区。</p>     
<ul>     
  <li>JVM解释器,将字节码的转换成为CPU能执行的机器指令。    
  <li>JVM指令系统同硬件计算机很相似。一条指令分成操作码和操作数两部分组成。操作码为8位二进制数,操作数可以根据需要而定。操作码是为了说明一条指令的功能,所以JVM可以有多达256种不同的操作指令。    
  <li>JVM有自己的虚拟寄存器,这样就可以快速的和JVM的解释器进行数据交换。为了功能的需要,JVM设置了常用的4个32位寄存器:pc(程序计数器),optop(操作数栈顶指针),frame(当前执行环境指针),vars(指向当前执行环境中第一个局部变量的指针)。    
  <li>JVM栈是指令执行的时候数据和信息存储的场所和控制中心,它提供给JVM解释器运算所需要的信息。    
  <li>JVM存储区就是为了把编译过后的字节码等信息存储起来。    
  <li>JVM碎片回收是指将那些使用过后的Java类的具体的实例从内存进行回收,这就使得开发人员免去了自己编程控制内存的麻烦和危险。随着JVM的不断升级其碎片回收的技术和算法也更加合理。比较经典的算法有引用计数、复制、标记-清除和标记-整理。在JVM1.4.1版以后产生了一种叫分代收集技术,简单的来说就是利用对象在程序中生存的时间划分成代,以这个为标准进行碎片回收。</li>    
</ul>    
<p>&nbsp;&nbsp;&nbsp;&nbsp; Java的编译过程也与其它的语言不同。例如像c++这样的语言,在编译的时候,是与机器的硬件平台信息密不可分的。编译程序通过查表将所有指令的操作数和操作码等等转换成内存的偏移量即程序运行时的内存分配方式,以保证程序运行。而Java却是将指令转换成为一种*.class的文件,这种文件不包含硬件的信息。需要执行的时候只要经过装了JVM的机器解释,创立内存布局后再通过查表来确定一条指令所在的地址。这样就有效的保证了Java的可移植性和安全性。</p>     
<p>&nbsp;&nbsp;      
通常一个程序运行的平台是一个硬件或者软件运行的环境。目前比较流行的是Windows      
2000, Linux, Solaris, 和MacOS。Java的平台不太一样,它由两个部分组成:一个是Java      
Virtual Machine即Java虚拟机,另一部分是Java Application Programming      
Interface (Java API) 即Java应用程序设计接口,这两部份软件就构成了Java运行的基本的环境。Java      
API      
是一个大的已经做好的软件集合,这个集合里有许多开发时所需要的控件,用来辅助开发。Java      
API和JVM整合在一起处于机器硬件之上。也就是说,Java平台把一个Java应用程序从硬件系统分离开从而很好的保证了程序的独立性。</p>     
<p>&nbsp;&nbsp;&nbsp; Java的运行系统一般包括几个部分:类装配器、字节码验证器、解释器、代码生成器和运行支持库,如下图所示:</p>     
<p align="center"><img border="0" src="picture/java02_03_01.gif" width="250" height="206"></p>     
<p align="left">Java字节码的运行有两种方式:</p>     
<p align="left">1.解释执行——最常见的执行方式</p>     
<p align="left">2.即时编译执行——对运行速度要求较高时采用这种方式</p>     
<p align="left">&nbsp;&nbsp; &nbsp;&nbsp; Java的<b>开发环境</b>有很多,最常用的有:JDK     
1.X、VJ++、JBuilder、JCreator Pro、Eclipse、Visaj、Java WorkShop等等。下面我们来看看JDK的安装。</p>   
<p align="left"><span class="text1">&nbsp;&nbsp;    
注意:安装完成后,还需要手工配置环境变量,必须在autoexec.bat中添加以下内容(假定JDK安装在C:\JDK1.3下)</span></p>   
<p align="left"><span class="text1">&nbsp;&nbsp; set path=%path%;c:\jdk1.3\bin<br>   
&nbsp;&nbsp; set classpath=%classpath%;c:\jdk1.3\lib\</span></p>   
<p align="left"><span class="text1">&nbsp;&nbsp; 如果是WINDOWS2000,也可以这样:打开控制面板——〉高级设置——〉环境变量——〉系统变量——〉path里添加一个路径。本课程中的所有例子都是以JDK1.3编译的。</span></p>  
<p align="left"><span class="text1">&nbsp; JDK本身只有一个编译和运行环境,对于源程序的编辑需要用WINDOWS的记事本或其它纯文本编辑工具。</span></p>  
<p align="left"><span class="text1">&nbsp; JDK所提供的开发工具都在安装目录的BIN目录下,主要有编译程序、解释执行程序、调试程序、Applet执行程序等。我们下面介绍最常用的编译程序的使用:</span></p> 
<p align="left">&nbsp;&nbsp;&nbsp; Java程序的编译程序是javac.exe。javac命令将Java程序编译成字节码,然后你可用java解释器java命令来解释执行这些Java字节码。Java程序源码必须存放在后缀为.java的文件里。Java 程序里的每一个类,javac都将生成与类相同名称但后缀为.class文件。编译器把.class文件放在.java文件的同一个目录里,除非你用了-d选项。当你引用到某些自己定义的类时,必须指明它们的存放目录,这就需要利用环境变量参数CLASSPATH。如果传递给javac编译器的源文件里引用到的类定义在本文件和传递的其它文件中找不到,则编译器会按CLASSPATH定义的路径来搜索。</p> 
<p align="left">&nbsp;&nbsp;  
注意,系统总是将系统类的目录缺省地加在CLASSPATH后面,除非你用-classpath选项来编译。javac_g 是一个用于调试的未优化的编译器,功能与用法和javac一样。javac的用法如下:<br>  
<br>  
javac [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir] file.java...&nbsp;<br> 
<br> 
以下是每个选项的解释。<br> 
<br> 
选项解释:<br> 
<br> 
-classpath path 定义javac搜索类的路径。它将覆盖缺省的CLASSPATH环境变量的设置。路径是由逗号隔开的路径名组成,一般格式如下:<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
.;&lt;your_path>&nbsp;<br>
 例如: .;C:\java\doc\classes;C:\tools\java\classes&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; 
表示如果编译器遇到一个新类,它先在本文件中查找它的定义,如果没有,则在本文件所处目录下其它文件中查找它的定义,如果还没有,则继续搜索C:\java\doc\classes目录中的所有文件,以此类推。<br> 
<br> 
-d directory 指明类层次的根目录,格式如下:<br>  
<br>  
javac -d &lt;my_dir> MyProgram.java&nbsp;<br> 
<br> 
这样将MyProgram.java程序里的生产的.class文件存放在my_dir目录里.&nbsp;<br> 
<br> 
-g 带调试信息编译,调试信息包括行号与使用java调试工具时用到的局部变量信息。如果编译没有加上-O优化选项,只包含行号信息。<br>  
<br>  
-nowarn 关闭警告信息,编译器将不显示任何警告信息。<br>  
<br>  
-O 优化编译static,final,private函数,注意你的类文件可能更大。<br>  
<br>  
-verbose&nbsp;<br> 
<br> 
让编译器与解释器显示被编译的源文件名和被加载的类名。<br> 
<br> 
<font size="3"><a href="index.htm">回目录</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
<a href="java02_02.htm">上一课</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="java02_04.htm">  
下一课</a></font></p>  
  
</body>  
  
</html>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -