JVM笔记(5)—— 运行时数据区—— 方法区

news2025/1/10 20:50:42

上一篇:JVM笔记(4)—— 运行时数据区——堆空间

一、栈、堆、方法区的交互关系

进程运行过程中,在方法中创建对象时通过方法区中的类型信息在堆中创建对应的对象,对象中又存有指向方法区中对应类型信息的指针,并将对象的地址引用存入虚拟机栈对应方法栈帧的局部变量表中。
在这里插入图片描述

二、方法区的理解

方法区是所有线程共享的区域,主要用于存储类加载系统加载进来的每个类的类信息,JIT即时编译器编译后的代码缓存等

在这里插入图片描述

jdk7及以前,方法区的实现称为永久代(PermGen space),8及以后则称为元空间(Metaspace)。
元空间与永久代的最大区别在于: 元空间不在虚拟机设置的内存中,而是直接使用本地内存 \color{red}{元空间不在虚拟机设置的内存中,而是直接使用本地内存} 元空间不在虚拟机设置的内存中,而是直接使用本地内存。因此更不容易出现OOM

三、设置方法区大小与OOM

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

四、方法区的内部结构

方法区主要存储类加载系统加载进来的每个类的类信息等,而方法区中一个类的类信息又包括类型信息、域信息、方法信息、运行时常量池四个部分。

1. 类信息

类型信息

在这里插入图片描述

域信息

也称为类的属性信息,类的域包括实例变量、类变量、类常量,域信息中要存储每个域的域名称、域类型、域修饰符,并且要存储这些域定义的顺序。

在这里插入图片描述

注意:jdk1.7及以后字符串常量池和类的静态变量被放到了堆中

方法信息

在这里插入图片描述

运行时常量池

在一个类的代码中有各种字面量(如字符串、数值等)或者其他类和方法,这些很长的字面量或者符号不可能直接写在字节码指令中,因此编译后在字节码文件中是用一个常量池来存储的,这样可以对符号重复利用,在字节码指令中直接用常量池索引来表示即可(例如字节码指令invokevirtual #3,表示执行索引#3存储的符号引用指向的方法)。常量池中包括各种字面量和对类型、域和方法的符号引用。

类的字节码文件加载到方法区后常量池即被转化为运行时常量池,其中对类型、域和方法的符号引用会转换为进程中其真实的地址。

在这里插入图片描述

五、方法区的演进细节

版本演进
jdk6方法区实现为永久代,静态变量和字符串常量池StringTable存储在方法区中
jdk7方法区实现为永久代,静态变量和字符串常量池转移到了堆中
jdk8方法区实现为元空间,并且方法区从虚拟机内存转移到了本地内存

注意这里指的是静态变量的引用,其所指向的对象始终都是在堆中

在这里插入图片描述

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

StringTable为什么要调整位置?

前置知识:

  1. 什么是字符串常量池?
  2. 深入浅出java常量池和基本数据类型对象池

在这里插入图片描述

六、方法区的垃圾收集

方法区垃圾收集主要回收两部分内容:常量池中不被引用的常量,不再被使用的类

在这里插入图片描述

七、运行时数据区总结

在这里插入图片描述

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

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

相关文章

Python采集热搜评论数据,制作词云分析,又是吃瓜的一天

前言 最近微博上的爆的热搜是不少啊,咳咳,23年1月31号记汪峰旷工一次 之前有营销号预言23年的娃瓜 已经爆出来一个了 好像是说还有两个来着 也不知道是谁的娃~ 现在已经没有什么可以震惊到我的了 胡歌都有娃了 彭于晏抓紧吧 有点点的无聊 就来用Pytho…

MySQL事件

文章目录事件介绍事件调度查询事件调度状态开关事件调度(临时)开关事件调度(永久)事件使用创建事件语法子句分析执行计划子句事件主体子句查询事件修改事件删除事件事件介绍 MySQL事件(event)是根据指定时间表执行的任务,称为计划事件。事件包含一个或多个SQL语句的…

【刷题】二进制求和

当你觉得小学二年级教的的竖式学会了以后,此题又是一记重击。 目录 前言 一、题目 二、找规律 三、思想 1.位数相同 2.位数不同 3.注意事项 四、具体实现 总结 前言 同上次做过的的二进制求和相似(按位异或求出的是无进位和,按位与求…

大数据技术架构(组件)14——Hive:掩码函数杂项函数

1.4.8、掩码函数1.4.8.1、mask-->Hive2.1.01.4.8.12、mask_first_n->Hive2.1.01.4.8.13、mask_last_n -->Hive2.1.01.4.8.14、mask_show_first_n-->Hive2.1.01.4.8.15、mask_show_last_n -->Hive2.1.01.4.8.16、mask_hash -->Hive2.1.0支持版本返回值类型函数…

让你深夜emo的“网抑云”,是如何做产品设计的?

网易云音乐作为国内首个以“歌单”为核心架构的音乐APP,有的人喜欢它的热评,有的人却觉得它的版权太少,虽然网易云音乐不是曲库最丰富的听歌软件,但绝对是听歌软件里情感体验最好的。 我很好奇它具有什么力量,能够使用…

ReentrantReadWriteLock可重入读写锁

目录 读写锁: 锁降级 锁饥饿: 读写锁: 定义:一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。 特点:读写互斥,写锁独占,读读可共享,读没有完…

分布式学习第三天—远程调用和网关

Feign远程调用 Feign的介绍 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送 Feign远程调用的使用步骤 1.引入依赖 在子模型服务的pom文件中引入feign的依赖: &l…

【计网】入门知识

一些基本认识网络传输基本要素:网络编程:python的网络编程方式TCP和UDP一些编程技巧socket实现TCP通信网络传输基本要素: 有连接通道、传输字节数据、输入输出遵守一样的协议 网络编程: CS(QQ下载客户端&#xff09…

linux防火墙究竟如何使用?iptables的原理与简单应用

1. 什么是防火墙? 在计算机体系中,防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其…

Vulkan 理解Vertex Input Description

此文为个人记录&#xff0c;感兴趣直接看https://zhuanlan.zhihu.com/p/450157594 首先&#xff0c;一个顶点的结构体 struct Vertex {glm::vec3 pos;glm::vec3 color; }CPU端给出顶点数据 const std::vector<Vertex> vertices {{{0.0f, -0.5f}, {1.0f, 0.0f, 0.0f}},…

Allegro如何显示盲埋孔钻孔所在层面操作指导

Allegro如何显示盲埋孔钻孔所在层面操作指导 在用Allegro做PCB设计的时候,涉及盲埋孔设计的时候,需要实时看到盲埋孔是打在哪层到哪层,如下图 实时显示了盲埋孔是从哪层到哪层的,比如1-3,3-6等等 如何显示,具体操作如下 选择Setup选择design Parameters

[golang Web开发] 3.golang web开发:处理请求

简介 Go语音的net/http包提供了一系列用于表示HTTP报文的结构,可以使用它处理请求和发送响应,其中Request结构代表了客户端发送的请求报文,下面是Request讲解 type Request struct {// Method指定HTTP方法&#xff08;GET、POST、PUT等&#xff09;。对客户端&#xff0c;"…

linux系统加固

linux安全加固 linux系统安全包括用户安全、权限安全、文件安全 从那些方面进行加固 身份鉴别 访问控制 安全审计 资源控制 入侵防范 在linux当中一切皆文件 身份鉴别 /etc/login.defs 文件功能 查看密码策略 /etc/login.defs文件定义了与/etc/passwd和/etc/shadow配套的用户限…

VOIP创建

一、介绍VOIP的推送证书的创建方式和普通的证书的创建方式基本一致。二、步骤首先需要生成证书签名的请求文件CerSingingRequest&#xff0c;打开钥匙串应用&#xff0c;点击钥匙串访问->证书助理->从证书颁发机构请求输入电子邮件和名称后保存到本地3.在developer.apple…

服务器防火墙 配置端口号

作为前端的我头次做运维的事情。 现在服务器是的默认端口好像只有80&#xff0c;443&#xff0c;其余端口都需要我们配置 域ping 通了&#xff0c;以为服务配置好了可以撸起袖子加油干&#xff0c;但是 访问公司的服务 出错了400 访问公司的服务xxx.168.30.xxx:8081&#xff…

【字符串】leetcode344.反转字符串(C/C++/Java/Python/Js)

leetcode344.反转字符串1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 Python版本3.5 JavaScript版本4 总结打基础的时候&#xff0c;不要太迷恋于库函数。 1 题目 题源链接 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给…

国内最新餐饮品牌全案设计十大排名(2023年榜单)

餐饮全案设计是餐饮店经营过程之前的重要一步&#xff0c;想要打造一家特色餐饮店并不是一件简单的事。一来要满足功能性需求的同时还具有一定的审美性&#xff1b;二来既要尽可能高地提升空间利用率让顾客消费体验愉悦和服务员工作效率高&#xff0c;能够展现餐厅的主题和文化…

分布式锁原理及Redis如何实现分布式锁

一淘模板给大家带来了关于redis的相关知识&#xff0c;其中主要介绍了关于分布式锁是什么&#xff1f;Redis又是怎么实现分布式锁的&#xff1f;需要满足什么条件&#xff1f;下面一起来看一下吧&#xff0c;希望对需要的朋友有帮助。 一、分布式锁基本原理 分布式锁&#xff…