【Java EE】JVM

目录

[1. JVM简介](#1. JVM简介)

2.JVM运行流程

3.JVM运行时数据区

[3.1 堆(线程共享)](#3.1 堆(线程共享))

[3.2 Java虚拟机栈(线程私有)](#3.2 Java虚拟机栈(线程私有))


1. JVM简介

JVM是 Java Virtual Machine 的简称,意为Java虚拟机。

虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔了的环境中的完整计算机系统。

常见的虚拟机:JVM、VMware、Virtual Box。

JVM和其他两个虚拟机的区别:

  1. VMware和Virtual Box是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器。
  2. JVM则是通过软件来模拟java字节码的指令集,JVM只是保留了PC寄存器,其他的寄存器都进行了剪裁。

JVM是一台被定制过的现实中不存在的计算机。

2.JVM运行流程

JVM执行流程

程序在执行之前要先把java字节码转换成字节码(class文件),JVM首先需要把字节码通过一定的方式类加载器 把文件加载到内存中运行时数据区 ,而字节码文件是JVM的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的指令解析器执行"引擎"将字节码翻译成底层系统指令在交由CPU执行,而这个过程中需要调用其他语言的接口 本地库接口来实现整个程序的功能,这就是4个主要部分的职责和功能。

总结来看,JVM主要通过分为以下四个部分,来执行java程序的,他们分别是:

  1. 类加载器
  2. 运行时数据区
  3. 执行引擎
  4. 本地库接口

3.JVM运行时数据区

JVM运行时数据区域也叫内存布局,但是需要注意的是它和java内存模型完全不同,是完全不同的两个概念,它由以下5大部分组成:

3.1 堆(线程共享)

堆的作用:程序中创建的所有对象都保存再堆中。

我们常见的JVM参数设置-Xms10m最小启动内存是针对堆的。-Xmx10m最大运行内存也是针对堆

堆里面分为两个区域:新生代和老生代,新生代方新建的对象,当经过一定GC次数之后还存在的对象会放入老生代。新生代还有三个区域:一个Endn+两个Survior(S0/S1)。

垃圾回收的时候会将Endn中存活的对象放到一个未使用的Suvivor中,并把当前的Endn和正在使用的Survivor清除掉。

3.2 Java虚拟机栈(线程私有)

Java虚拟机栈的作用:Java虚拟机栈的生命周期和线程相同,Java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。我们常说的堆内存、栈内存指的就是虚拟机栈。

Java虚拟机栈中包含了以下四个部分:

相关推荐
解孔明29 分钟前
IDEA2023.1添加java虚拟机启动参数,打开断言
java·开发语言
关关不烦恼32 分钟前
【Java数据结构】二叉树
java·开发语言·数据结构
苹果酱056733 分钟前
使用 React Testing Library 测试自定义 React Hooks
java·开发语言·spring boot·后端·中间件
好奇的菜鸟42 分钟前
Java技术体系:深入理解JDK与JRE及其产品线
java·开发语言
api771 小时前
1688商品详情API返回值中的售后保障与服务信息
java·服务器·前端·javascript·python·spring·pygame
疑惑的杰瑞1 小时前
[乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题
java·c++·vscode·python·eclipse·sublime text·visual studio
自身就是太阳1 小时前
深入理解 Spring 事务管理及其配置
java·开发语言·数据库·spring
喵手1 小时前
Java零基础-多态详解
java·开发语言·python
麋鹿会飞但不飘2 小时前
EasyExcel拿表头(二级表头)爬坑,invokeHeadMap方法
java·spring boot·excel
Gauss松鼠会2 小时前
GaussDB关键技术原理:高弹性(四)
java·大数据·网络·数据库·分布式·gaussdb