Java编译环境安装

1、JDK

     JDK-6-windows-i586.exe安装。

     其中,JDK包含了JRE、JVM。

     A、JRE

     B、JVM

Java虚拟机
什么是Java虚拟机
Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。

1.为什么要使用Java虚拟机

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

2.谁需要了解Java虚拟机

Java虚拟机是Java语言底层实现的基础,对Java语言感兴趣的人都应对Java虚拟机有个大概的了解。这有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果你想扩展Java语言,或是把其它语言编译成Java语言的字节码,你也需要深入地了解Java虚拟机。

3.Java虚拟机支持的数据类型

Java虚拟机支持Java语言的基本数据类型如下:

byte://1字节有符号整数的补码
short://2字节有符号整数的补码
int://4字节有符号整数的补码
long://8字节有符号整数的补码
float://4字节IEEE754单精度浮点数
double://8字节IEEE754双精度浮点数
char://2字节无符号Unicode字符

几乎所有的Java类型检查都是在编译时完成的。上面列出的原始数据类型的数据在Java执行时不需要用硬件标记。操作这些原始数据类型数据的字节码(指令)本身就已经指出了操作数的数据类型,例如iadd、ladd、fadd和dadd指令都是把两个数相加,其操作数类型别是int、long、float和double。虚拟机没有给boolean(布尔)类型设置单独的指令。boolean型的数据是由integer指令,包括integer返回来处理的。boolean型的数组则是用byte数组来处理的。虚拟机使用IEEE754格式的浮点数。不支持IEEE格式的较旧的计算机,在运行Java数值计算程序时,可能会非常慢。

虚拟机支持的其它数据类型包括:
object//对一个Javaobject(对象)的4字节引用
returnAddress//4字节,用于jsr/ret/jsr-w/ret-w指令
注:Java数组被当作object处理。

虚拟机的规范对于object内部的结构没有任何特殊的要求。在Sun公司的实现中,对object的引用是一个句柄,其中包含一对指针:一个指针指向该object的方法表,另一个指向该object的数据。用Java虚拟机的字节码表示的程序应该遵守类型规定。Java虚拟机的实现应拒绝执行违反了类型规定的字节码程序。Java虚拟机由于字节码定义的限制似乎只能运行于32位地址空间的机器上。但是可以创建一个Java虚拟机,它自动地把字节码转换成64位的形式。从Java虚拟机支持的数据类型可以看出,Java对数据类型的内部格式进行了严格规定,这样使得各种Java虚拟机的实现对数据的解释是相同的,从而保证了Java的与平台无关性和可
移植性。

Java虚拟机体系结构
Java虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。这五部分是Java虚拟机的逻辑成份,不依赖任何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。

1.Java指令集

Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。
Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。

虚拟机的内层循环的执行过程如下:

do{
取一个操作符字节;
根据操作符的值执行一个动作;
}while(程序未结束)

由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为:

第一个字节*256+第二个字节字节码指令流一般只是字节对齐的。指令tableswitch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。

2.寄存器

Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。

Java虚拟机的寄存器有四种:
pc:Java程序计数器。
optop:指向操作数栈顶端的指针。
frame:指向当前执行方法的执行环境的指针。
vars:指向当前执行方法的局部变量区第一个变量的指针。

Java虚拟机

Java虚拟机是栈式的,它不定义或使用寄存器来传递或接受参数,其目的是为了保证指令集的简洁性和实现时的高效性(特别是对于寄存器数目不多的处理器)。
所有寄存器都是32位的。

3.栈

Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。

(1)局部变量区 每个Java方法使用一个固定大小的局部变量集。它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了两个局部变量的空间,却按照第一个局部变量的索引来寻址。(例如,一个具有索引n的局部变量,如果是一个双精度浮点数,那么它实际占据了索引n和n+1所代表的存储空间。)虚拟机规范并不要求在局部变量中的64位的值是64位对齐的。虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写入局部变量的指令。

(2)运行环境区 在运行环境中包含的信息用于动态链接,正常的方法返回以及异常传播。

·动态链接
运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法的class文件代码在引用要调用的方法和要访问的变量时使用符号。动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运行时的存储结构相应的偏移地址。动态链接方法和变量使得方法中使用的其它类的变化不会影响到本程序的代码。

·正常的方法返回
如果当前方法正常地结束了,在执行了一条具有正确类型的返回指令时,调用的方法会得到一个返回值。执行环境在正常返回的情况下用于恢复调用者的寄存器,并把调用者的程序计数器增加一个恰当的数值,以跳过已执行过的方法调用指令,然后在调用者的执行环境中继续执行下去。

·异常和错误传播
异常情况在Java中被称作Error(错误)或Exception(异常),是Throwable类的子类,在程序中的原因是:①动态链接错,如无法找到所需的class文件。②运行时错,如对一个空指针的引用

·程序使用了throw语句。
当异常发生时,Java虚拟机采取如下措施:
·检查与当前方法相联系的catch子句表。每个catch子句包含其有效指令范围,能够处理的异常类型,以及处理异常的代码块地址。
·与异常相匹配的catch子句应该符合下面的条件:造成异常的指令在其指令范围之内,发生的异常类型是其能处理的异常类型的子类型。如果找到了匹配的catch子句,那么系统转移到指定的异常处理块处执行;如果没有找到异常处理块,重复寻找匹配的catch子句的过程,直到当前方法的所有嵌套的catch子句都被检查过。
·由于虚拟机从第一个匹配的catch子句处继续执行,所以catch子句表中的顺序是很重要的。因为Java代码是结构化的,因此总可以把某个方法的所有的异常处理器都按序排列到一个表中,对任意可能的程序计数器的值,都可以用线性的顺序找到合适的异常处理块,以处理在该程序计数器值下发生的异常情况。
·如果找不到匹配的catch子句,那么当前方法得到一个"未截获异常"的结果并返回到当前方法的调用者,好像异常刚刚在其调用者中发生一样。如果在调用者中仍然没有找到相应的异常处理块,那么这种错误传播将被继续下去。如果错误被传播到最顶层,那么系统将调用一个缺省的异常处理块。
(3)操作数栈区 机器指令只从操作数栈中取操作数,对它们进行操作,并把结果返回到栈中。选择栈结构的原因是:在只有少量寄存器或非通用寄存器的机器(如Intel486)上,也能够高效地模拟虚拟机的行为。操作数栈是32位的。它用于给方法传递参数,并从方法接收结果,也用于支持操作的参数,并保存操作的结果。例如,iadd指令将两个整数相加。相加的两个整数应该是操作数栈顶的两个字。这两个字是由先前的指令压进堆栈的。这两个整数将从堆栈弹出、相加,并把结果压回到操作数栈中。

每个原始数据类型都有专门的指令对它们进行必须的操作。每个操作数在栈中需要一个存储位置,除了long和double型,它们需要两个位置。操作数只能被适用于其类型的操作符所操作。例如,压入两个int类型的数,如果把它们当作是一个long类型的数则是非法的。在Sun的虚拟机实现中,这个限制由字节码验证器强制实行。但是,有少数操作(操作符dupe和swap),用于对运行时数据区进行操作时是不考虑类型的。

4.无用单元收集堆

Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java语言具有无用单元收集能力:它不给程序员显式释放对象的能力。Java不规定具体使用的无用单元收集算法,可以根据系统的需求使用各种各样的算法。

5.方法区

方法区与传统语言中的编译后代码或是Unix进程中的正文段类似。它保存方法代码(编译后的java代码)和符号表。在当前的Java实现中,方法代码不包括在无用单元收集堆中,但计划在将来的版本中实现。每个类文件包含了一个Java类或一个Java界面的编译后的代码。可以说类文件是Java语言的执行代码文件。为了保证类文件的平台无关性,Java虚拟机规范中对类文件的格式也作了详细的说明。其具体细节请参考Sun公司的Java虚拟机规范。

     C、环境变量

jre和jvm有什么区别2007年04月24日 星期二 上午 11:08
   jre:java    runtiom    enviroment    Java运行期环境  
   有这个东西,就能运行java程序。  
   打个比方:  
   如果说虚拟机是操作系统,jre就是pc硬件。  
   java之所以能跨平台,就是在jre的层次上屏蔽了不同系统的差异。  
   jre可以单独下载安装  
   若下载的是jdk,jre自然也包含在了其中。

  
   如果安装了JDK,会发同你的电脑有两套JRE,  
   一套位于    <JDK安装目录>/jre    
   另外一套位于    C:/Program    Files/Java/j2re1.4.1_01    目录下  
   后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于    C:/Program    Files/Java    目录下的JRE。  
   如果你只安装JRE,而不是JDK,那么只会在    C:/Program    Files/Java    目录下安装唯一的一套JRE。  
   
   JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java    PC机,都具有运行Java程序的功能。所以我们可以说,只要你的电脑安装了JRE,就可以正确运行Java应用程序。  
   
   1、为什么Sun要让JDK安装两套相同的JRE?  
   这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在    <JDK安装目录>/lib/tools.jar    里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果:  
   Exception    in    thread    "main"    java.lang.NoClassDefFoundError:    com/sun/tools/javac/Main  
   这个意思是说,你输入javac.exe与输入  
   
   java    -cp    c:/jdk/lib/tools.jar    com.sun.tools.javac.Main  
   
   是一样的,会得到相同的结果。  
   从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现<JDK安装目录>/lib目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:/Program    Files/Java目录下的那套JRE就是用来运行一般Java程序用的。  
   
   2、如果一台电脑安装两套以上的JRE,谁来决定呢?  
   这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。  
   Java.exe依照底下的顺序来查找JRE:  
   自己的目录下有没有JRE;  
   父目录有没有JRE;  
   查询注册表:  
   [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java    Runtime    Environment]  
   所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。  
   
   3、介绍JVM  
   JRE目录下的Bin目录有两个目录:server与client。这就是真正的jvm.dll所在。  
   jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32    API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位于jvm.dll所在目录的父目录之中。  
   因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录底下的jvm.dll。
 

JDK官方下载 JDK APICHM中文参考下载

JDK官方下载 JDK APICHM中文参考下载2009-04-29 13:42JDK6官方下载地址:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

2、Eclipse IDE编译环境

     A、Eclipse

     B、JDK包,jav包

     C、WorkSpace

3、其他编译环境

     JBuilder

4、Java开发网站推荐

     A 、Java论坛

    

5、手机开发网站推荐

http://www.d.cn/

http://www.csdn.net

http://www.d.cn/

除了http://51cto.com上有致力于Java技术的Java论坛之外,还有哪些Java论坛可用于学习呢,如下论坛或许会对你的Java的学习有所帮助的:

序列 Java论坛名称介绍
第一个:视频在线学习社区 :各种计算机专业视频资料和电子图书
第二个:千源网 :各个专业的视频资料大全
第三个:ECLIPSE中国社区:ECLIPSE的专业论坛讨论区
第四个:中国IT实验室     :专业的计算机软件和网络以及培训视频和电子图书下载
第五个:Stevie Liu的博客:JAVA专业的一个人的著名博客
第六个:JAVA开发者社区    :著名的用于开发的JAVA论坛
第七个:   JAVA台湾社区       :台湾地区的著名JAVA讨论社区
第八个:SUN的JAVA官网      :所有的JAVA的最新消息在这里都能找到!
第九个:   灰狐动力        :一个专业的中间件网站,在J2EE企业应用技术方面有深厚的造诣。
第十个:   JAVA研究组织      :Java研究组织,有很多优秀的Java方面的文章和教程
第十一个:   中国JSP技术网站     :JSP技术网站,有相当多的Java方面的文章和资源。
第十二个:   JDON论坛       :个人性质的中文J2EE专业技术论坛,技术含量非常高,帖子质量非常好。
第十三个: 陈刚个人博客 :比较出名的一个人的博客
第十四个: 飞茂个人博客 :比较出名的一个人的博客
第十五个: 剑盟论坛 :有名的论坛
第十六个: 落伍者论坛 :有名的论坛
第十七个: 中天在线论坛 :有名的论坛
第十八个: 聆听社区 :有名的论坛
第十九个: 软件测试基地 :有名软件测试的论坛
第二十个: matrix java论坛 :有名java开发软件的论坛

JDK6 API CHM中文参考下载:

JDK6API中文参考070114.rar :http://chinesedocument.com/upimg/soft/JDK6API中文参考070114.rar

Java SE 6 API 中文版 CHM 下载:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHM

Java SE 5 API 中文版 CHM 下载:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/JDK_API_1_5_zh_CN.CHM

JDK6 API 中文版下载:

https://jdk-api-zh-cn.dev.java.net/

JDK6 API 中文版 HTML 格式在线文档:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/
JDK6 API 中文版zip 格式下载: http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html_zh_CN.zip

JDK 1.6 API下载地址:

SUN官方API中文版【JDK1.6】
1.6API文档(中文)的下载地址:
ZIP格式:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_zh_CN.zip

CHM格式:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHM

Java编译环境安装相关推荐

  1. 编java用jdk还是editplus_怎样运用EditPlus进行配置Java编译环境

    不知道大家是否知道其实学习java主要有三种开发工具,分别是文本编辑软件.EcliPSe以及JBuilder.那么他们三者之间又有什么区别呢?小编就这三者发表一下个人的意见吧.对于学习Java的初学者 ...

  2. Java编译环境的构建

    Java编译环境的构建 一.在环境变量中: classpath C:/Sun/AppServer/jdk/lib/tools.jar;C:/Sun/AppServer/jdk/lib/dt.jar; ...

  3. 在notepad++中配置java编译环境

    在notepad++中配置java编译环境 (1)首先,下载安装了Notepad++,在菜单栏那里找到Plugin Manager,有一些版本是没有中文的,所有只有Plugin Manager,如果连 ...

  4. java编译环境_搭建java编译环境

    搭建java编译环境 一.java编译环境 1.准备工作: 下载 jdk-7u79-linux-x64.tar.gz 压缩包 解压 tar zxf jdk-7u79-linux-x64.tar.gz ...

  5. 【vscode 】如何通过vscode完成JAVA编译环境配置

    vscode真的是神器,可用于日常的代码编写 下面记录一下如何在vscode中配置java编译环境 Step1 : 安装好vscode Step2: 安装好JAVA SDK并完成环境变量配置 Step ...

  6. VScode搭建java编译环境(jdk11 vscode版本1.48.0)

    重要内容:VScode JDK 1.打开vscode.ctrl+shift+x打开扩展面板,也就是vscode的插件面板,依次下载安装要编译java所需要的依赖插件 Java Extension Pa ...

  7. java实验环境,实验一(Java开发环境安装与配置

    <实验一(Java开发环境安装与配置>由会员分享,可在线阅读,更多相关<实验一(Java开发环境安装与配置(6页珍藏版)>请在人人文库网上搜索. 1.实验报告实验报告序号:实验 ...

  8. Java开发环境安装与配置(快速配置)

    知识的广度来自知识的深度,学习如果不成体系那是多可怕的一件事儿,希望我们在未来的学习道路上坚守初心,不要给自己留下遗憾,以自己喜欢的方式生活,做自己喜欢做的事,宠爱自己,做一个独一无二的自己! 对于文 ...

  9. MStar平台编译环境安装

    MStar平台编译环境安装,傻瓜式安装方法,包含NONOS,AN4.4,AN6.0,AN8.0等等,如下图: Linux选用Ubuntu 16.04. /etc/profile增加: /toolcha ...

  10. Java开发环境安装搭建

    Java开发环境安装搭建 JDK下载与安装: 安装JDK: 安装JDK: https://www.oracle.com/cn/java/technologies/javase/javase8-arch ...

最新文章

  1. 软考自查:多媒体基础知识
  2. Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)
  3. 开发中 常用 js 记录(一)
  4. ML二:python批量修改文件名-测试KDTree
  5. Silverlight专题(10)- WatermarkedTextBox使用
  6. vue 模板 html 表达式,Vue 模板template、指令directive、修饰符
  7. 1052. 爱生气的书店老板
  8. ELK学习总结(2-2)单模式CRUD操作
  9. 95-36-210-ChannelHandler-系统Channel-TimeoutHandler1
  10. Atitit blend mode COLOR_DODGE 混合模式  “颜色减淡”模式
  11. 计算机连接小米usb驱动,win10系统安装小米usb驱动的详细步骤
  12. mysql基于SpringBoot的“1818小酒馆”商城网站的设计与实现毕业设计源码192004
  13. ddl是什么意思网络语_跟随你大学的流行词语 DDL 你竟还不知道?
  14. Linux下驱动开发
  15. PAR 相控阵方法,阵元间隔原理
  16. 认识Delphi的线程类
  17. csapp第一章 计算机系统漫游 学习和理解
  18. iphone应用开发
  19. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )...
  20. 实验2-5-3 求平方根序列前N项和(C语言)

热门文章

  1. 怎么用计算机算e的次方,如何在计算器上计算e的x次方?
  2. 元素化学期末(考点)整理
  3. VS2008 断点不起作用 失效
  4. 【软件测试面试题】证券项目面试过程总结
  5. 【实习】大三暑假实习总结:工作记录、个人日记、感悟总结
  6. 建立良好人际关系的原则
  7. Tkinter单选框
  8. 单GPU每秒76帧,重叠对象也能完美分割,多模态Transformer用于视频分割效果惊艳...
  9. Java课程设计答辩之感想
  10. 为Windows Live Writer写一个简单的插件