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

java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程

文章目录

  • PC Register
  • 虚拟机栈
  • 方法区(Metaspace元空间
  • 双亲委派机制
    • 类加载器
  • 类装载的执行过程

在这里插入图片描述

在这里插入图片描述

PC Register

程序计数器(Program Counter Register)是 Java 虚拟机(JVM)中的一个组件,它在 JVM 的内存模型中扮演着非常重要的角色。程序计数器是一块较小的内存空间,它的作用可以简单概括为:

  1. 存储指令地址:程序计数器用于存储指向下一条指令的地址,即当前线程执行的字节码的行号指示器。因为 JVM 执行的是字节码,所以程序计数器中存储的是字节码指令的地址。

  2. 线程私有:每个线程都有自己的程序计数器,这意味着它是线程私有的内存区域。这确保了在多线程环境中,不同线程执行的指令不会相互干扰。

  3. 上下文切换:在多线程环境中,当线程从执行状态切换到等待状态或被阻塞时,JVM 需要保存当前线程的程序计数器的值,以便在线程重新获得 CPU 时间片时能够从上次停止的地方继续执行。

  4. 分支跳转:程序计数器还负责分支跳转,比如循环、条件判断、方法调用等。当执行跳转指令时,程序计数器会更新为跳转目标的地址。

  5. 异常处理:在异常发生时,程序计数器也用于确定异常发生的位置,以便异常处理机制能够正确地捕获和处理异常。

程序计数器是 JVM 内存模型中唯一没有规定任何OutOfMemoryError(内存溢出错误)的区域。这是因为程序计数器的内存空间通常非常小,仅用于存储一个地址值,因此不存在内存不足的情况。

在实际的 JVM 实现中,程序计数器可能不直接以一个单独的内存区域存在,而是通过其他方式实现,比如在线程的栈中维护一个指向当前执行字节码指令的指针。无论如何实现,程序计数器的核心功能和作用都是相同的。

jdk8和jdk7的区别?

永久代挪到了本地内存的元空间区域,是java八的优化,防止堆内存设置小了,导致存储的静态变量,常量,类信息爆空间,设置大了又浪费内存空间,直接放到本地内存里面就完事儿了!
在这里插入图片描述
堆主要还是保存对象和数组。
如果对象被GC多次之后依然存活,那么会从伊甸园区(Eden)挪到s0,再挪到s1,最后挪到老年代区。
s0和s1是幸存者区域(survivor区)
在这里插入图片描述

虚拟机栈

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法区(Metaspace元空间

jdk8,永久代变成MetaSpace元空间,占用本地内存
在这里插入图片描述
元空间主要还是存储类信息,静态变量,常量,编译好的代码

双亲委派机制

java会把源代码编译为字节码,再由类加载系统加载到运行时数据区
在这里插入图片描述

类加载器

类加载器:吧字节码文件加载到JVM内存里面

  1. 当加载一个类时,先判断此类是否已经被加载,如果类已经被加载则返回;

  2. 如果类没有被加载,则先委托父类加载(父类加载时会判断该类有没有被自己加载过),如果父类加载过则返回;如果没被加载过则继续向上委托;

  3. 如果一直委托都无法加载,子类加载器才会尝试自己加载。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

类装载的执行过程

标红的表示当前执行到的阶段
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.mrgr.cn/news/75117.html

相关文章:

  • 校园二手交易网站毕业设计基于SpringBootSSM框架
  • 力扣每日一题 3261. 统计满足 K 约束的子字符串数量 II
  • 「 审稿答复 」如何写Response评论回复的“第一句”
  • spring cloud 入门笔记1(RestTemplate,Consul)
  • 使用docker-compose单点搭建社区版seafile+onlyoffice在线word编辑平台
  • C++ 关于基于范围的for循环(C++11) 语法 详解
  • 线程的状态有哪些?它是如何工作的?
  • SMA-BP基于黏菌算法优化BP神经网络时间序列预测
  • 解析安卓镜像包和提取DTB文件的操作日志
  • 探索AutoDL与CodeWithGPU:深度学习之旅的新起点
  • 时序论文20|ICLR20 可解释时间序列预测N-BEATS
  • 【算法一周目】双指针(2)
  • JavaScript总结
  • Path.Combine容易被忽略的细节
  • DAPP迎启动契机,Scroll 生态全面启动为 Pencils Protocol 赋能
  • C++函数的返回值在内存中的传递过程
  • 第4章-计划 4.4 范围管理
  • Python基础学习-07不可重复的set集合
  • 常用的生物医药专利查询数据库及网站(很全!)
  • Jetpack 之 Ink API初探
  • qt QQuickView详解
  • 《DPT: Deformable Patch-based Transformer for Visual Recognition》论文翻译
  • Go常见框架对比
  • AI驱动的电商创新:提升销售效率与用户体验
  • session 的工作原理
  • SpringBoot(十)SpringBoot使用QQ邮箱stmp发送邮件