详解JDK,JRE,JVM

JDK,JRE,JVM详解

JDK,JRE,JVM:

详解JDK,JRE,JVM_第1张图片

JDK:

Java开发工具包(Java Developer’s Kit),里面包含了以下目录。
详解JDK,JRE,JVM_第2张图片
**bin目录:**二进制文件类型binary的简称,bin文件里面存放的都是.exe可执行文件,jdk附带的一些命令行工具。

最常用到的有:

javac.exe : Java语言编译器,它负责把Java源代码(.java文件)编译成(.class文件)

java.exe: Java语言解释器,它负责启动虚拟机,执行Java字节码文件。

appletviewer.exe: 小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。

javadoc.exe: Java语言文档生成器。将源程序中的注释提取成html格式的文档。

jdb.exe: Java调试器,可以逐行执行程序,设置断点和检查变量。

include目录: 由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,所以include目录里面是一些供C语言使用的标题文件,其中C语言的头文件支持Java本地接口和Java虚拟机调试程序接口的本地编程技术。

jre目录: (Java runtime environment即Java运行时环境)目录路径下安装的就是运行Java程序所必须的JRE环境 ,其中包含虚拟机JVM,以及Java运行时所需要的一些类库。

lib目录 : lib是libarary(类库)的缩写。存放的是开发工具使用的归档包文件。例如jar包等,dt.jar是所谓DesignTime的东西,是给JavaBean和IDE用的,jconsole.jar是给jconsole工具用的tools.jar包含了对开发工具的支持功能库

src.zip: Java所有核心类库的源代码。通过该文件可以查看Java基础类的源代码

JRE:

Java运行环境,里面包含了虚拟机JVM和Java运行代码时一些需要的类库。

JVM:

不同的系统平台包含不同的版本的JVM,比如(windows版本或者Linux版本的)

Jvm包含类加载子系统,直接内存区,执行引擎,垃圾回收器,运行时数据区(堆,栈,本地方法栈,方法区,程序计数器)。

类加载子系统:负责加载.class文件信息,并存储在方法区中

直接内存区:直接内存是位于Java堆外的直接向系统申请的内存空间。访问直接内存的速度会优于Java堆,一般而言,读写频繁的场合会考虑使用直接内存

执行引擎:执行引擎负责执行虚拟机的字节码,通过编译技术把字节码变成机器码。
详解JDK,JRE,JVM_第3张图片
什么是解释器,什么是JIT编译器?

解释器:当Java虚拟机启动时,会根据规范对字节码文件进行解释的执行,逐条把字节码文件翻译成机器语言。

JIT编译器: 就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言。

运行时数据区

1.堆:堆解决的是对象存储问题,垃圾回收器管理的主要区域

2.栈:解决程序运行的问题,栈里面存的栈帧,局部变量表,操作数栈,操作数栈,方法的出口信息

1)栈帧

每个方法从调用到执行的过程就是一个栈帧在虚拟机栈中入栈到出栈的过程。

(2)局部变量表

用于保存函数的参数和局部变量。

(3)操作数栈

操作数栈又称操作栈,大多数指令都是从这里弹出数据,执行运算,然后把结果压回操作数栈。

3.方法区:存储被虚拟机加载的信息,常量 ,静态变量 ,即时编译器编译之后的代码

4.本地方法栈:和栈的功能是一样的,不过执行的是本地方法,Java调用非Java代码的接口

5.程序计数器(PC寄存器):存放的是当前线程执行的行数 ,JVM工作就是通过改变这个计数器的值来选取下一个需要执行的字节码指令

JAVA程序的加载过程:

详解JDK,JRE,JVM_第4张图片

当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。
详解JDK,JRE,JVM_第5张图片

JDK的安装:

JAVA_HOME E:\Java\jdk1.8.0_291 jdk安装目录
Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

有时候运行一个软件,就需要找到它在计算机的地址,JAVA_HOME 就是JDK在计算机中的地址,至于为什么用JAVA_HOME这个命名,因为这个名字是和很多第三方软件的约定,比如tomcat,他们使用JDK寻址的时候就用的JAVA_HOME。

Path 配置导向的地址是Java的JRE目录,这个目录是编译Java源文件的,javac

个名字是和很多第三方软件的约定,比如tomcat,他们使用JDK寻址的时候就用的JAVA_HOME。

Path 配置导向的地址是Java的JRE目录,这个目录是编译Java源文件的,javac

CLASSPATH 作用指定类的搜索路径,

你可能感兴趣的:(jvm,java,开发语言)