JVM知识

news2025/1/22 19:37:23

类加载机制

虚拟机把class文件加载到内存,并对数据进行校验,转换解析和初始化,形成虚拟机可以直接使用的Java类型,即java.lang.class

装载(Load)

ClassFile -> 字节流 ->类加载器

查找和导入class文件

1:通过一个类的全限定名获取定义此类的二进制字节流

2:将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构

3:在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口

链接(Link)

     验证(Verify)

     保证被加载类的正确性

     文件格式验证,元数据验证,字节码验证,符号引用验证

     准备(Prepare)

     为类的静态变量分配内存,并将其初始化为默认值

    解析(Resolve)

    把类中的符号引用转换为直接引用

    符号引用:就是一个组符号来描述目标,可以是任何字面量。

    直接引用:就是直接指向目标的指针,相对偏移量或一个间接定位到目标的句柄。

    解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。

    解析动作主要针对类或接口,字段,类方法,接口方法,方法类型,方法句柄和调用限定符7类符号引用进行。

    初始化(Initialize) 

    对类的静态变量,静态代码块执行初始化操作  执行Clinit方法

类加载器ClassLoader    用来装载Class文件

在装载(Load)阶段,通过类的全限定名获取其定义的二进制字节流,需要借助类装载器完成。

1:Bootstrap ClassLoader 负责加载JAVA_HOME中jre/lib/rt.jar里所有的class或Xbootclassoath选项中指定的jar包。由C++实现,不是ClassLoader子类

2:Extension ClassLoader负责加载java平台中扩展功能的一些jar包,包括'$$JAVA_HOME'中jar/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

3:App ClassLoad负责加载classpath中指定的jar包及Djava.class.path所指定目录下类和jar包

4:Custom ClassLoader通过java.lang.ClassLoader的子类自定义加载class属于应用程序根据自身需要自定义的ClassLoader如tomcat,jboss都会根据j2ee规范自行实现ClassLoader

双亲委派机制

向上检查,向下委派

运行时数据区(方法区,堆,虚拟机栈,本地方法栈,程序计数器)

方法区(Method Area)
   1:方法区是各个线程共享的内存区域,在虚拟机启动时创建

    2:虽然java虚拟机规范把方法区描述为堆的一个逻辑部分,但是有一个别名叫Non-Heap,目的与java堆区分开来

    3:用于存储已被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据

    4:当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常

JVM运行时数据区是一种规范,真正的实现在JDK8中是Metaspace,在JDK6或7中是Perm Space

堆(Heap)

     1:java堆是java虚拟机所管理内存中最大的一块,在虚拟机启动时创建,被所有线程共享

     2:java对象实例以及数组在堆上分配

虚拟机栈(Java Virtual Machine Stacks)

     1:虚拟机栈是一个线程执行的区域,保存着一个线程中方法的调用状态。 一个java线程的运行状态由一个虚拟机栈来保存,所以虚拟机栈肯定是线程私有的,独有的随着线程的创建而创建

     2:每一个被线程执行的方法,为该栈中的栈帧,即每个方法对应一个栈帧。调用一个方法,就会向栈中压入一个栈帧;一个方法调用完成,就会把该栈帧从栈中弹出

栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间

每个栈帧中包括局部变量表(Local Variables),操作数栈(Operand Stack),指向运行时常量池的引用(A reference to the run-time constant pool),方法返回地址(Return Address)和附加信息

局部变量表:方法中定义的局部变量以及方法的参数存放在这张表中

局部变量表中的变量不可直接使用,如需要使用的话,必须通过相关指令将其加载至操作数栈中作为操作数使用

操作数栈:以压栈和出栈的方式存储操作数

动态链接:每个栈帧包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态链接(Dynamic Linking)

方法返回地址:当一个方法开发执行后,只有两种方式可以退出,一种是遇到方法返回的字节码指令;一种是遇见异常。并且这个异常没有在方法体内得到处理

对象的创建以及分配过程

 FullGC = young GC + Old GC + MetaSpace GC

对象内存布局:Mark Word(一系列的标记位哈希码,分代年龄,锁状态标志等) + Class Pointer(指向对象对应的类元数据的内存地址) + Length(数组对象特有) + 实例数据(包含了对象的所有成员变量,大小由各个变量类型决定)  + 对齐填充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434192.html

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

相关文章

解决方案|以大数据为抓手,打造粮食安全智慧监管平台

食为政首,粮安天下,粮食问题一直深受总书记记挂,总书记多次提到:“中国十三亿多人口,吃饭主要靠自己,不能靠外面来解决。” 近年来粮食安全事件频发,中央纪委国家监委在全国开展粮食购销领域腐败…

程序员的那些事儿

作者主页:爱笑的男孩。 持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。 如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666foxmail.com 目…

编译后的hue 替换cdh默认版本hue步骤

基于hue源码编译的hue 进行替换cdh6.x.x默认带的hue版本,主要解决hue滚动条 拉的时候,一下就到末尾的bug,通过源码编译githu上的hue解决问题 一. 拷贝编译好的hue到cdh目录替换原来hue目录 三.启动hue报错 问题一:没有pip命令 pip list -bash: pip: command not found …

4.17、TCP三次握手

4.17、TCP三次握手 1.TCP三次握手2.TCP通信具体流程①三次握手②服务器客户端进行通信 1.TCP三次握手 TCP 是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一…

热点数据监测方法

在日常开发中,我们需要着重注意一种场景-热点数据。他可能是一种请求,每次请求的数据类型都是一样的;可能是同一个数据,比如页面上公用的类型数据;可能是同一个用户大量的请求。他们都有着同一个特点,瞬时爆…

Redis---哨兵服务

一、配置哨兵服务 1、哨兵服务介绍 监视 master 服务器,发现 master 宕机后,将 slave 服务器提升为 master 服务器 主配置文件:sentinel.conf 模板文件:redis-4.0.8/sentinel.conf 哨兵服务:类似于mha的管理节点&#…

ELK日志

思维导图 一、ELK介绍 ELK是Elasticsearch、Logstash、Kibana首字母大写缩写,后续加入了Beats(Beats是负责单一用途数据采集并推送给Logstash或Elasticsearch的轻量级产品),就更名为 Elastic Stack。 Elastic Stack技术栈的功能…

JVM-GC回收机制

目录 1.判定垃圾 1.引用计数 2.可达性分析 2.清理垃圾 1.标记清除 2.复制算法 3.标记整理 4.分代回收 上文讲述的Java运行时内存划分,对于程序计数器,虚拟机栈,本地方法栈来说,生命周期是和线程有关的,随着线程而生,随线程而灭,当方法结束或者线程结束时,它们的内存就自…

细讲const与引用的关系

目录 先了解语言层面的权限 进入正题引用与const权限关系 引用权限的概念 const引用返回值时错误情况 一:返回到临时空间时权限问题 二:临时空间到调用处保存问题 结论:如果不对子函数内部数据修改、那么在父函数变量ret的类型可以设置…

vite+vue3+ts开发流程

目录 vue页面开发 数据类型开发 组件开发 API开发 页面中使用组件、API、数据类型 vue页面开发 <template><!-- 卡片区域--><el-card style"padding:0px;"><!-- 搜索与添加区域--><div style"margin-bottom: 15px;&quo…

SAP ABAP selection screen 动态获取字段名不需要回车触发

SAP ABAP selection screen &#xff0c;get field vaule without click Enter key. 有个需求&#xff0c;界面上几个字段的搜索帮助需要根据已输入值联动&#xff0c;比如AOP version 根据已输入的BU 过滤。 但尴尬的是在事件AT SELECTION-SCREEN ON VALUE-REQUEST FOR 中&a…

.Net中的标识框架Identity

中间件&#xff1a; 1、Authentication对访问者的用户身份进行验证&#xff0c;“用户是否登录成功”。 2、Authorization验证访问者的用户身份是否有对资源访问的访问权限&#xff0c;“用户是否有权限访问这个地址”。 简单描述 1、标识&#xff08;Identity&#xff09;框架…

TCP协议二:TCP状态转换(重要)

TCP状态转换分析https://www.bilibili.com/video/BV1iJ411S7UA?p44&spm_id_frompageDriver&vd_sourced239c7cf48aa4f74eccfa736c3122e65 TCP状态转换图 粗实线&#xff1a;主动端 虚线&#xff1a; 被动端 细实线&#xff1a;内核操作 状态分析 CLOSED&#xff1…

RabbitMQ:消息中间件

文章目录 概念管理界面简介4中常见交换器类型1.Direct交换器:2.Fanout交换器3.Topic交换器4.headers交换器 对象类型消息传递同步等待使用代码创建队列待续...... 概念 在微服务架构中项目之间项目A调用项目B 项目B调用项目C项目C调用项目D。。 用户必须等待项目之间内容依次的…

后端太难了,不 All in 了

作者&#xff1a;阿秀 校招八股文学习网站&#xff1a;https://interviewguide.cn 这是阿秀的第「256」篇原创 小伙伴们大家好&#xff0c;我是阿秀。 欢迎今年参加秋招的小伙伴加入阿秀的学习圈&#xff0c;目前已经超过 2200 小伙伴加入&#xff01;去年认真准备和走下来的基…

Segment Anything Model代码讲解(二)之image_encoder

image_encoder代码解析 在transformer的结构中&#xff0c;编码是非常重要的部分。接下来看image_encoder的代码部分目录 class ImageEncoderViT def initdef forward class Block def initdef forward class Attention def initdef forward def window_partitiondef window_…

【C++】引用(下)【深度全面解析】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

自定义类型——枚举与联合体

枚举 枚举顾名思义就是一一列举 把可能的取值一一列举 枚举类型的定义 enum Day//星期 {Mon,Tues,Wed,Thur,Fri,Sat,Sun };enum Sex//性别 {MALE,FEMALE,SECRET }&#xff1b;以上定义的 enum Day &#xff0c; enum Sex 都是枚举类型 { }中的内容是枚举类型的可能取值&…

English Learning - L2 第 14 次小组纠音 复习元音 [ɔɪ ] [aʊ] [əʊ] [ɪə] 弱读 2023.4.12 周三

English Learning - L2 第 14 次小组纠音 复习元音 [ɔɪ ] [aʊ] [əʊ] [ɪə] 弱读 2023.4.12 周三 共性问题coin voice /kɔɪn/ /vɔɪs/ 中 ɔɪvowel pounds /ˈvaʊəl/ /paʊndz/ 中的 aʊshow /ʃəʊ/beer nearly /bɪə/ /ˈnɪəlɪ/ 中的 ɪəbest bed ten /best…

U-Boot 烧写与启动

1.uboot 编译好以后就可以烧写到板子上使用了&#xff0c;这里我们跟前面裸机例程一样&#xff0c;将 uboot 烧写到 SD 卡中&#xff0c;然后通过 SD 卡来启动来运行 uboot。使用 imxdownload 软件烧写&#xff0c;命令如 下&#xff1a; chmod 777 imxdownload //给予 imxdo…