欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK、JRE与JVM

程序员文章站 2024-03-06 16:08:08
...

JDK、JRE、JVM的关系

JDK:Java Development Kit
JRE:Java Runtime Environment
JVM:Java Virtual Machine
JDK、JRE与JVM

JDK目录下文件(以jdk1.8.0为例)

JDK、JRE与JVM

文件 作用
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的第三方许可证信息

编译流程

JDK、JRE与JVM
(1)Java代码编译是由Java源码编译器来完成,也就是Java代码到JVM字节码(.class文件)的过程。 流程图如下所示:
JDK、JRE与JVM
(2)Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
JDK、JRE与JVM

JVM组成

JDK、JRE与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");
	}
}

以上述代码为例:
JDK、JRE与JVM
栈帧的基本组成:
JDK、JRE与JVM

程序计数器

      是线程独有的区域,每个线程都会分配程序计数器的内存,用来存放当前线程正在运行或者即将要运行的jvm指令码对应的地址,或者说行号位置。
      在多线程之间的切换,当一个程序被挂起时,总要恢复的,通过程序计数器解决恢复到哪个位置的问题。

方法区

存放常量、静态变量、类元信息。
JDK、JRE与JVM
JDK、JRE与JVM

本地方法栈

      使用较少。每个线程在运行的时候,如果有运行到本地方法,必然要产生局部变量等,就需要存储在本地方法栈。如果没有本地方法,也就没有本地方法栈了。

JDK、JRE与JVM
JDK、JRE与JVM
(new出来的对象存在于Eden区)

相关标签: 原理