阅读原文
一、环境运行
Java语言运行环境分为硬件环境和软件环境。
1、硬件环境
硬件环境通常是指我们的操作系统,主要有:Windows、Linux、Unix等,一般Window和Unix作为我们的开发硬件环境而Linux作为生产实施硬件环境。
2、软件环境
对于Java语言来说软件环境是指JRE(Java Runtime Environment),它是Java运行的环境集合,包含了JVM的标准实现以及Java的核心类库。JVM(Java Virtual Machine),Java虚拟机,是实现Java跨平台性的重要组件,也是Java语言运行的软件环境基础。
二、什么是JDK?
JDK(Java Development Kit),Java开发工具,它是Java的核心,包括了JRE、Java工具和Java基本类库。
那么通过以上所述,就可以知道JDK、JRE、JVM三者之间的关系了,如下图:
三、安装JDK(以Jdk1.8版本为例)
下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载:
下载成功的包:
文件名解释:
jdk-8u131:
jdk版本
Windows:
操作系统,也就是所谓的硬件环境
x64:
操作系统位数,Windows操作系统在计算机属性中查看;Linux操作系统使用命令(file /sbin/init)查看。
安装JDK:
安装时如果不想指定盘符和文件夹时,只需默认安装即可,如果想要指定文件时,需要注意父子文件夹最好为英文,否则会出现无法预测的问题。安装过程非常简单这里就不做介绍了,但是需要说明一点,在安装完JDK后,它会提示我们安装公共JRE,公共JRE是一个独立的JRE系统,会单独进行安装,公共JRE会向IE等浏览器和和操作系统中注册Java运行时环境。通过这种方式,系统中的任何应用程序都可以使用公共JRE。由于现在在网页上执行Applet(网页端小程序)的机会越来越少,所以可以无需安装公共的JRE,直接使用JDK目录下的JRE即可。
安装成功后目录:
JDK目录介绍:
bin:
主要存放JDK的各种工具命令,例如javac,java等等。
db:
Java自带数据库的安装路径。
include:
存放的是C相关的一些头文件,主要用于Java调用C或者C++程序。
jre:
存放的是与Java运行环境相关的文件。
lib:
存放的是JDK工具命令执行的相关程序。
src:
存放的是Java所有核心类库的源代码。
主要目录就以上6个,其他的就不做介绍了。
四、Java环境变量配置
1、在Windows上配置Java环境变量
配置JAVA_HOME:值为Jdk的安装目录
第一步:
第二步:
第三步:
第四步:
到此JAVA_HOME就配置完成了。
配置path:值为%JAVA_HOME%\bin;
第五步:
第六步:
至此在windows上的Java环境变量配置完成。
第七步:在cmd窗口下使用java -version 命令验证
调用cmd窗口快捷键:windows键 + R键,输入cmd即可。
第八步:执行java -version命令
2、在Linux上配置Java环境变量
第一步:上传jdk包并解压
上传路径(个人习惯):/home/java/
解压路径(个人习惯):/home/java/
解压命令:tar -zxvf 包名称
第二步:配置环境变量
编辑环境变量配置文件命令:vi /etc/profile
JAVA_HOME=/home/java/jdk1.8.0_221
#jdk解压路径
CLASSPATH=$JAVA_HOME/lib/
#jdk命令程序路径,Windows也可以配置。
PATH=$PATH:$JAVA_HOME/bin
#配置path
export PATH JAVA_HOME CLASSPATH
#导入三个变量
退出编辑命令:esc键
保存退出命令::qw
第三步:激活环境变量
命令:source /etc/profile
第四步:检查环境变量是否配置成功
命令:echo $JAVA_HOME echo $PATH
至此,在Linux上的Java环境变量配置完成。
五、JAVA_HOME、PATH、CLASSPATH变量的作用
JAVA_HOME:
配置的是JDK的安装路径,可以不配置,但是为了方便的更换JDK版本,以及为了Tomcat、Eclipse等软件配置JDK时更加的方便,建议还是需要配置它。
PATH:
操作系统通过PATH环境变量来查找命令,PATH配置的是一系列的路径,在操作系统中运行命令时,操作系统会在PATH配置的路径中搜索用户输入的命令,如果找到了,则执行,否则将提示“不是系统内部或外部命令,也不是可运行的程序或批处理文件”。例如,Java中的java -version、java、javac等命令,都是通过path来执行的。
CLASSPATH:
可配可不配,它的主要作用就是配置*.class文件的存放路径,一般用来加载第三方类库,如果不配置默认从当前路径下搜索*.class文件,如果配置则根据配置的路径进行搜索,需要注意的是如果想要配置CLASSPATH也想让其从当前路径进行搜索*.class文件,则必须在路径中配置(.),最基础的配置如下:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
当然我们也可以定义自己的路径,只需用分号隔开继续追加即可。
六、Java运行原理
Java是一种特殊的高级语言,它既具有解释性语言的特性,也具有编译性语言的特征,废话不多说,先看运行原理图:
1、Java源代码也就是*.java文件通过javac命令编译成*.class文件,也就是Java源代码对应的字节码文件,我们在使用ide开发的时候并没有执行javac命令,为什么程序还是正常执行呢?其实在我们使用ide开发的时候当我们保存当前文件或者鼠标离开当前文件时,聪明的ide已经帮我们执行javac命令,进而生成了我们运行时所需的Java字节码文件。
2、当我们需要运行某个程序时,这个程序可能需要一个或者多个Java字节码文件,这些文件包括我们自己开发的也包括Java自身的类库。当我们的程序使用到某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化,类文件(*.class)的加载是由类加载器完成的,Java的类加载器分为三种:
Boostrap(根加载器):
一般用本地代码实现,也就是带native关键字的代码,负责加载JVM基础核心类库(rt.jar)。
Extension(扩展加载器):
从系统属性java.ext.dirs指定的目录中加载类库,它的父加载器是Bootstrap。
System(系统加载器):
又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器,它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类文件,是用户自定义加载器的默认父加载器。
3、JVM逐行的将字节码通过解释器和即时编译器转为机器码,并通过运行期系统提供的本地方法将机器码发送给操作系统进由CPU执行。
以上就是Java语言的工作原理,关于JVM的运行原理及优化又是一门非常有挑战性的学科,需要我们继续去深究。
更多最新技术文章,请关注“冰点IT”公众号