1.JVM--Java Virtual Machine(Java虚拟机)
1.1 定义
JVM提供了执行Java字节码的运行环境,它还可以运行用其他语言编写并编译成字节码的程序。它只是一组规范,在物理上并不存在。JVM能够:加载代码、验证代码、执行代码并提供运行环境。
1.2 JVM的结构
Classloader
类加载器是JVM的一个子系统,用于加载类文件。每当我们运行Java程序时,它首先由类加载器加载.
Method Area方法区
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
Heap 堆
它是在运行时存储对象的数据区域。我们将new出来的结构(比如数组、对象)加载在堆空间中。补充:对象的属性(非static的)加载在堆空间中。
Stack 栈
栈在Java中用来保存局部变量和部分结果,并在方法调用和返回中发挥作用。每个线程都有一个私有JVM栈,与线程同时创建。
PC Register
PC(程序计数器)寄存器包含当前正在执行的Java虚拟机指令的地址。
Native Method Stack
它包含应用程序中使用的所有本机方法。
Execution Engine
它包含:
1.虚拟处理器
2.解释器(Interpreter):读取字节码流,然后执行指令。
3. 即时编译器(Just-In-Time compiler):它被用来提高性能.JIT同时编译具有类似功能的部分字节代码,从而减少编译所需的时间。
Java Native Interface
JNI是一个框架,它提供一个接口来与另一种语言(如C、C++、Assembly等)编写的应用程序进行通信。Java使用JNI框架将输出发送到控制台或与OS库交互。
2.JRE--Java Runtime Environment
JRE是为运行Java程序提供环境的安装包,它是JVM的实现。它在物理上是存在的。它包含一组库和JVM在运行时使用的其他文件。
3.JDK--Java Development Kit
3.1 定义
JDK是为开发和运行Java程序提供环境的工具包,它仅被Java开发者使用,包括:
1. 开发工具(用来开发Java程序)
2.JRE (用来执行Java程序)
JDK分为三个版本:标准版(Java SE,用来做电脑上运行的软件),企业版(Java EE,用来做网站)和移动版(Java ME,用来做手机软件)。
3.2 JDK中的部分组件的作用:
javac: 它指定Java编译器,它将源代码转换为Java字节码。
java: Java应用程序的加载程序。这个工具是一个解释器,可以解释javac编译器生成的类文件。
javadoc: 文档生成器,它从源代码注释自动生成文档。
jar: 指定归档程序,它将相关类库打包到单个JAR文件中。此工具还有助于管理JAR文件。
javap: 类文件反汇编程序。
JConsole: Java监控和管理控制台。
Java VirtualVM:它是一个可视化工具,集成了几个命令行jdk工具和轻量级性能和内存分析功能。