一、JDK、JRE、JVM的相关概念
JDK:Java开发工具包,包括了Java运行环境JRE(Java Runtime Envirnment)、一些Java工具(javac、java、jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JRE:Java运行环境,使用Java开发的系统或者app要跑起来必须具备的环境,也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
JVM:Java虚拟机,JVM是整个Java实现跨平台的最核心的部分,所有的Java程序会首先被编译 为.class的类文件,这种类文件可以在虚拟机上执行。即class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行
二、三者关系
1.JDK中包含了JRE,JRE又包含JVM
2.JVM中包括的五大块
1)线程共享区
方法区:存储已被JVM加载的类信息、常量、静态变量等数据。
堆:存储的是我们new来的对象,不存放基本类型和对象引用。
JVM 的调优主要就是围绕堆,栈两大块进行。
2)线程独占区
虚拟机栈:每个线程都会有一个虚拟机栈,多线程就会有多个虚拟机栈。虚拟机栈里面是一个一个的栈帧(Stack Frame),每一个栈帧都是在方法执行的同时创建的,描述的是Java方法执行的内存模型。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。
本地方法栈:服务的对象是JVM执行的native方法,其就是一个java调用非java代码的接口,作用是与操作系统和外部环境交互 如果某个虚拟机实现的本地方法接口是使用C连接模型的话,那么它的本地方法栈就是C栈
程序计数器:记录着当前线程所执行的字节码的行号指示器,用于存放下一条指令所在单元的地址的地方。当线程重新获得CPU的执行权的时候,就直接从记录的位置开始执行,分支、循环、跳转、异常处理也都依赖这个程序计数器来完成。