JDK、JRE与JVM
程序员文章站
2024-03-06 16:08:08
...
JDK、JRE与JVM
JDK、JRE、JVM的关系
JDK:Java Development Kit
JRE:Java Runtime Environment
JVM:Java Virtual Machine
JDK目录下文件(以jdk1.8.0为例)
文件 | 作用 |
---|---|
bin | 包含一些用于开发java的工具。如编译工具javaw.exe,运行工具java.exe,打包工具jar.exe。 |
db | 纯java开发的关系数据库。 |
include | C语言的头文件,用于支持java程序设计。 |
jre | java运行时环境的根目录。 |
—bin | 包含java平台所使用工具和类库的可执行文件和dll。 |
—lib | java运行时环境所使用的核心类库 |
lib | JDK工具命令的实际执行程序。(即bin中绝大部分命令运行的是lib中程序) |
COPYRIGHT | 版权 |
javafx-src.zip | JavaFX脚本是一种声明式、静态类型编程语言 |
LICENSE | 许可证 |
README.html | 信息说明 |
release | 发布版本 |
src.zip | 归档的java源代码 |
THIRDPARTYLICENSEREADME.txt | 第三方许可证信息 |
THIRDPARTYLICENSEREADME-JAVAFX.txt | JavaFX的第三方许可证信息 |
编译流程
(1)Java代码编译是由Java源码编译器来完成,也就是Java代码到JVM字节码(.class文件)的过程。 流程图如下所示:
(2)Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
JVM组成
栈
线程独有的区域,存放局部变量。
public class Math{
public static int initData = 666;
public static User user = new User();
public int compute(){
int a=1;
int b=2;
int c=a+b;
return c;
}
public static void main(String[] args){
Math math = new Math();
math.compute();
System.out.println("test");
}
}
以上述代码为例:
栈帧的基本组成:
程序计数器
是线程独有的区域,每个线程都会分配程序计数器的内存,用来存放当前线程正在运行或者即将要运行的jvm指令码对应的地址,或者说行号位置。
在多线程之间的切换,当一个程序被挂起时,总要恢复的,通过程序计数器解决恢复到哪个位置的问题。
方法区
存放常量、静态变量、类元信息。
本地方法栈
使用较少。每个线程在运行的时候,如果有运行到本地方法,必然要产生局部变量等,就需要存储在本地方法栈。如果没有本地方法,也就没有本地方法栈了。
堆
(new出来的对象存在于Eden区)
上一篇: 解决读取文件乱码问题
下一篇: Reader:字符输入流