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

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 对象的过程,执行构造方法,以及父类的构造方法。


http://www.kler.cn/a/559790.html

相关文章:

  • centos服务器巡检脚本
  • AWQ和GPTQ量化的区别
  • 接口测试基础 --- 什么是接口测试及其测试流程?
  • 利用Ai对生成的测试用例进行用例评审
  • Web自动化之Selenium实战案例1:论文pdf自动下载
  • 网络安全入门 | TCP/IP协议栈核心协议详解(附攻防案例)
  • 【redis】redis内存管理,过期策略与淘汰策略
  • 嵌入式硬件篇---常用的汇编语言指令
  • C#初级教程(7)——初级期末检测
  • 【大模型LLM】DeepSeek LLM Scaling Open-Source Language Models with Longtermism
  • Docker(Nginx)部署Vue
  • 代码随想录算法训练营第四十四天| 动态规划07
  • 【深度学习】Adam和AdamW优化器有什么区别,以及为什么Adam会被自适应学习率影响
  • Netstat(Network Statistics)网络工具介绍
  • 《游戏人工智能编程 案例精粹》阅读心得
  • 【AI】面试高频考点-数据标注规则
  • blackbox.ai 一站式AI代理 畅享顶级模型
  • Qt学习 网络编程 TPC通信
  • 激光工控机在自动化生产线中有什么关键作用?
  • Pinia 3.0 正式发布:全面拥抱 Vue 3 生态,升级指南与实战教程