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

news2024/11/19 0:12:02

文章目录

  • 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.coloradmin.cn/o/2243076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案

在人形机器人操作领域,有一个极具价值的问题:鉴于操作数据在人形操作技能学习中的重要性,如何有效地从现实世界中获取操作数据的完整状态?如果可以,那考虑到人类庞大规模的人口和进行复杂操作的简单直观性与可扩展性&a…

Linux:进程的优先级 进程切换

文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤(重要) 二、Linux2.6内核进程O(1)调度队列(重要&#x…

鸿蒙学习生态应用开发能力全景图-赋能套件(1)

文章目录 赋能套件鸿蒙生态应用开发能力全景图 赋能套件 鸿蒙生态白皮书: 全面阐释了鸿蒙生态下应用开发核心理念、关键能力以及创新体验,旨在帮助开发者快速、准确、全面的了解鸿蒙开发套件给开发者提供的能力全景和未来的愿景。 视频课程: 基于真实的开发场景,提供向导式…

Docker 的安装与使用

Docker 的安装 Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。 Docker CE 的安装请参考官方文档&#xf…

MATLAB向量元素的引用

我们定义一个向量后,如果想引用的话,可以通过索引 i n d ind ind来实现。 注意:MATLAB中向量的开始索引是1,与许多编程语言不同。 例如: 如果想引用多个的话,可以用索引 i n d ind ind来提取多个位置 例如…

力扣周赛:第424场周赛

👨‍🎓作者简介:爱好技术和算法的研究生 🌌上期文章:力扣周赛:第422场周赛 📚订阅专栏:力扣周赛 希望文章对你们有所帮助 第一道题模拟题,第二道题经典拆分数组/线段树都…

SpringBoot配置相关的内容

依赖Starter和Parent 查依赖坐标网站:Maven Repository: Search/Browse/Explorehttps://mvnrepository.com/ 设置配置文件 配置文件相关的配置 yml多个数据的书写 配置文件的读取

第九部分 :1.STM32之通信接口《精讲》(USART,I2C,SPI,CAN,USB)

本芯片使用的是STM32F103C8T6型号 STM32F103C8T6是STM32F1系列中的一种较常用的低成本ARM Cortex-M3内核MCU,具有丰富的通信接口,包括USART、SPI、I2C等。下面是该芯片上通信接口的管脚分布、每个接口的工作模式、常用应用场景和注意事项。 1. USART (通…

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化,有现成的解决方案:①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数,根本就不是把数据发送到网络中!本质都是…

WebRTC视频 02 - 视频采集类 VideoCaptureModule

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule(本文) WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前言…

解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍后片刻再重试,或与系统管理员或技术支持联系“问题

当我们远程连接服务器连接不上并提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍候片刻再重试,或与系统管理员或技术支持联系”时,根本原因是当前计算机远程连接时输入了过多的错误密码,触…

企业BI工具如何选择?主流5款BI工具多维对比

数据大爆炸时代,企业数据爆发式增长,来自产品、运营、价值链以及外部的数据都成指数级增长趋势。利用大数据分析实现精细化运营,驱动业务增长是企业的理想蓝图。而BI工具能够整合、分析并可视化复杂的数据集,帮助管理层和决策者快…

Sping全面复习

Spring框架是一个功能强大且广泛使用的Java平台,它通过提供全面的基础设施支持,使得开发人员能够轻松构建高效、可移植、易于测试的代码。Spring的核心特性包括依赖注入(DI)、面向切面编程(AOP)和事件驱动模…

深挖C++赋值

详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结: int a 10 是指在内存中(栈)中创建一个int (4 byte)大小的空间…

vue项目使用eslint+prettier管理项目格式化

代码格式化、规范化说明 使用eslintprettier进行格式化,vscode中需要安装插件ESLint、Prettier - Code formatter,且格式化程序选择为后者(vue文件、js文件要分别设置) 对于eslint规则,在格式化时不会全部自动调整&…

让空间计算触手可及,VR手套何以点石成金?

引言 如何让一位母亲与她去世的小女儿“重逢”?韩国MBC电视台《I Met You》节目实现了一个“不可能”心愿。 在空旷的绿幕中,母亲Jang Ji-sung透过VR头显,看到了三年前因白血病去世的女儿Nayeon。当她伸出双手,居然能摸到女儿的…

多模态简述

多模态学习概念 【多模态简述-哔哩哔哩】 https://b23.tv/UrUyfln 定义: 模态:事物表达或感知的方式 多模态:研究异构和相互连接数据的科学,涵盖了从原始的器官信号到抽象概念的多种模态 语音和语言是理解人物交互的关键模态&am…

RabbitMQ-死信队列(golang)

1、概念 死信(Dead Letter),字面上可以理解为未被消费者成功消费的信息,正常来说,生产者将消息放入到队列中,消费者从队列获取消息,并进行处理,但是由于某种原因,队列中的…

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 8.1.1 简单水平导航栏的设计与实现 8.1.1.1导航栏的创建 <nav>标签是 HIML5 新增的文档结构标签&#xff0c;用于标记导航栏&#xff0c;以便后续与网站的其他内整合&#xff0c;所以常用<nav>标签在页面上创建导航栏菜单区域。 例如,在<na…

「人眼视觉不再是视频消费的唯一形式」丨智能编解码和 AI 视频生成专场回顾@RTE2024

你是否想过&#xff0c;未来你看到的电影预告片、广告&#xff0c;甚至新闻报道&#xff0c;都可能完全由 AI 生成&#xff1f; 在人工智能迅猛发展的今天&#xff0c;视频技术正经历着一场前所未有的变革。从智能编解码到虚拟数字人&#xff0c;再到 AI 驱动的视频生成&#…