当前位置: 首页 > news >正文

JAVA EE初阶 JVM

JVM

Java是一个跨平台的语言,可以不加修改在任何操作系统中运行。
示例1

JVM运行流程

代码编译之后生成了什么文件?

java文本文件 —> class字节码文件,最终会在JVM中执行。

class文件怎么被JVM加载并运行?

示例2

JVM运行时数据区

JVM运行时数据区包括:堆,Java虚拟机栈,本地方法栈,程序计数器,方法区。

方法区(内存共享)

保存的就是类对象(new 对象的模版)
方法区是JVM中的规范。JDK7的实现中称为永久代,JDK8的实现中称为元空间。区别在于管理内存的方式不同。
因为存放的是公共的数据,那么所有的线程都可以访问这个区域。

堆(内存共享)

在代码中使用new关键词创建的对象,全都在堆区(内存空间)
JVM内存使用最大的一个内存区域,默认程序最大的运行内存是本机的8/1。
我们常见的JVM参数设置 -xms10m 最小启动内存是针对堆的,-Xmx10m 最大运行内存也是针对堆的。
ms是memory start的简称,mx是memory max的简称。

Java虚拟机栈(线程私有)

Java虚拟机栈的作用:Java虚拟机栈的生命周期和线程相同。
每创建一个线程都会在内存中创建一个与之对应的Java虚拟机栈
示例3

本地方法栈

调用本地方法时使用的栈

程序计数器(线程私有)

记录当前线程执行到哪一行,下次回到CPU的时候从计数器位置开始执行。

JVM类加载的过程

示例4

加载

在当前的classpath(当前的根目录)下找到所有的class文件,读取到内存中

验证

验证class文件是否符合JVM的规范

准备

为类中定义的静态变量分配内存并设置变量初始值
public static int value = 666;
它是初始化value的int值为0 ,而非666。

解析

解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程,也就是初始化常量的过程。

初始化

new 对象的过程,执行构造方法,以及父类的构造方法。

相关文章:

  • nginx作为下载服务器配置
  • FPGA开发要学些什么?如何快速入门?
  • 第8章作业
  • Nginx知识详解(理论+实战更易懂)
  • 【十一】Golang 指针
  • 免费开源多平台轻量级本地视频工具,支持Windows、Android
  • 面试知识点2
  • Android 11.0 WiFi连接默认设置静态IP地址功能实现
  • mapbox基础,使用geojson加载Fill面图层
  • 2.20学习
  • minio作为K8S后端存储
  • 悬挂引用,智能指针 裸指针 悬挂指针
  • 项目汇报PPT转视频制作 | 有字幕和配音版
  • EasyPoi系列之通用导入接口设计
  • 二分查找!!!!
  • 【OpenCV】OpenCV 中各模块及其算子的详细分类
  • el-message自定义HTML包含按钮点击事件
  • 记录一个ES分词器不生效的解决过程
  • 知识库-搜索知识接口
  • Java链表全解析:从单向链表到双向链表的实现与优化
  • 马上评丨市长信箱“已读乱回”,群众在意的是什么
  • 美大学建“私人联盟”对抗政府:学校已存在300年,特朗普才上任3个月
  • 全过程人民民主研究基地揭牌,为推动我国民主政治建设贡献上海智慧
  • 伊朗港口爆炸致18死800余伤,三分之二伤者已出院
  • 持续更新丨伊朗官员:港口爆炸事件已致5人死亡
  • 艺术与医学的对话,瑞金医院办了一个展览