1. JVM介绍和运行流程-CSDN博客

2. 什么是程序计数器-CSDN博客

3. java 堆和 JVM 内存结构-CSDN博客

4. 虚拟机栈-CSDN博客

5. JVM 的方法区-CSDN博客

6. JVM直接内存-CSDN博客

7. JVM类加载器与双亲委派模型-CSDN博客

8. JVM类装载的执行过程-CSDN博客

9. JVM垃圾回收-CSDN博客

10. 垃圾回收的算法-CSDN博客

11. JVM中的分代回收-CSDN博客

12. JVM的垃圾回收器-CSDN博客

13. G1垃圾回收器-CSDN博客

14. 垃圾回收的引用区别-CSDN博客

15. JVM调优的参数设置-CSDN博客

16. JVM调优工具-CSDN博客


1. 什么是方法区

方法区是Java虚拟机(JVM)内存结构中的一个重要组成部分,主要用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

主要特点

  1. 共享内存区域:所有线程共享方法区

  2. 逻辑部分:是Java堆的逻辑组成部分

  3. 规范描述:在JVM规范中属于堆的一个逻辑部分,但习惯上被称为"非堆"(Non-Heap)

 发展与演进

  • 永久代(PermGen):在JDK7及之前,虚拟机用永久代来实现方法区。

  • 元空间(Metaspace)(方法区):从JDK8开始,永久代被移除,改用本地内存实现的元空间(方法区)。

存储内容 

方法区主要存储:

  • 类信息(Class元数据)

  • 运行时常量池

  • 静态变量

  • 即时编译器编译后的代码(JIT编译的本地代码)

  • 方法代码


2.  元空间的常量池

常量池(Constant Pool)是 Java 类文件(.class 文件)和 JVM 运行时内存中的一个重要数据结构,用于存储类、方法、字段等相关的符号引用和字面量。

它分为两种:

  1. Class 文件常量池(静态常量池,编译期生成)

  2. 运行时常量池(Runtime Constant Pool,JVM 运行时使用)

常量池 可以看作是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等信息 。 

可以使用下面的指令查看字节码结构(类的基本信息、常量池、方法定义):

javap -vApplication.class

例如下图: 


Class 文件常量池(静态常量池)

在 .class 文件中,常量池存储了类、方法、字段等的符号引用字面量,主要包括:

  • 字面量(Literals)

    • 字符串(如 "Hello"

    • 整数、浮点数(如 1003.14

    • 布尔值(true/false

    • null

  • 符号引用(Symbolic References)

    • 类和接口的全限定名(如 java/lang/Object

    • 字段的名称和描述符(如 name:Ljava/lang/String;

    • 方法的名称和描述符(如 main:([Ljava/lang/String;)V

特点

  • 编译期生成,存储在 .class 文件中

  • 不占用 JVM 内存,仅用于类加载时的解析


运行时常量池(Runtime Constant Pool)

当 JVM 加载类时,会将 Class 文件常量池的内容解析并存储到 方法区(元空间) 中的运行时常量池。它包含:

  • 解析后的直接引用(如方法、字段的内存地址)

  • 动态生成的常量(如 String.intern() 的字符串)

  • JVM 运行时的符号引用解析结果

特点

  • 存储在 方法区(JDK 8 后是元空间)

  • 可以动态添加(如 String.intern()

  • 如果内存不足,会抛出 OutOfMemoryError


3. 总结 

3.1 什么是方法区?

  • 方法区(Method Area)是各个线程共享的内存区域
  • 主要存储类的信息、运行时常量池
  • 虚拟机启动的时候创建,关闭虚拟机时释放
  • 如果方法区域中的内存无法满足分配请求,则会抛出OutOfMemoryError:Metaspace

3.2 介绍一下运行时常量池

  • 常量池:可以看作是一张表,虚拟机指令根据这张常量表找到要执行的类名方法名、参数类型、字面量等信息
  • 当类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全的基本练习

一.docker搭建 1.安装dockerapt-get install docker.io docker-compose2.编写配置文件(注意路径正确)vim /etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment"HTTP_PROXYhttp://科学上网访问的ip:端口" Environment&…

380. O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。 bool remove(int val) 当元素 val 存在时&#xff…

【LeetCode Hot100 | 每日刷题】字母异位词分组

题目链接:49. 字母异位词分组 - 力扣(LeetCode) 题目: 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 示例 1: 输入: strs ["eat", "tea", "tan"…

docker 安装windows

目录 下载地址: 使用教程: docker compose 查看版本 测试启动 hello-world 报错1 The system cannot find the file specified: 检查 Docker Desktop 是否运行中 报错2HF_ENDPOINT 1. 临时解决方案(当前终端会话有效&…

docker compose 和build

目录 docker compose 和build 的区别是什么? 核心差别: 1. docker build --platform linux/amd64 -f Dockerfile -t infiniflow/ragflow:nightly_lbg . 2. docker compose -f docker-compose-gpu.yml up -d 二者如何配合? 总结 docker …

裂变时刻:全球关税重构下的券商交易系统跃迁路线图(2025-2027)

——基于RWA清算、量子加密与实时非线性风控的下一代跨境基础设施核心事件锚定:特朗普于7月7日对14国启动分级关税制裁(日韩25%、东南亚30%-40%、金砖关联国10%附加税),引发日元兑美元暴跌至144.47、铜价单日跳涨3.2%、散户单日交…

python爬虫初入门——基本库和写入方法

1.准备环境 python环境:3.10 2.常用库 1.请求库:实现 HTTP 请求操作 requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。seleni…

Sonar扫描C#代码配置

需要的工具 MSBuild、sonar-scanner-4.6.1.2450-windows、jdk1.8.0_181 下载地址:https://download.csdn.net/download/code12313/91315686 配置sonar的地址 一、环境变量配置 1.新建变量,nameSONAR_RUNNER_MSBUILD_HOME。valueD:\work\dev\dev_serve…

python 在运行时没有加载修改后的版本

陈旧的Python字节码 (.pyc 文件):最常见的原因!Python 会把你修改的 .py 文件编译成 .pyc 字节码来加速后续运行。有时,即使你修改了 .py 文件,系统可能仍然固执地加载旧的、未被删除的 .pyc 文件。1. 用“硬编码探针”强制验证# …

【会员专享数据】2013-2024年我国省市县三级逐年SO₂数值数据(Shp/Excel格式)

之前我们分享过2013-2024年全国范围逐年SO₂栅格数据(可查看之前的文章获悉详情)!该数据来源于韦晶博士、李占清教授团队发布在国家青藏高原科学数据中心网站上的中国高分辨率高质量近地表空气污染物数据集。很多小伙伴拿到数据后反馈栅格数据…

出现SSL连接错误的原因和解决方案

介绍 SSL连接错误是一种常见但关键的问题,这可能会阻止客户端和服务器之间的安全连接。这些错误发生在TLS握手过程失败时,这意味着客户端和服务器无法建立安全的HTTPS连接。这种失败可以在SSL/TLS协商过程中的任何阶段发生,从初始协议协议到…

vue3 el-date-picker 保存后 日期减一问题

在使用 el-date-picker(Element UI 的日期选择器组件)时,如果你发现日期在保存到后台后自动减一,这通常是由于时区差异或者是时间格式解析问题导致的。这里有一些可能的解决方案:1. 检查前端发送的日期格式确保你在前端…

什么是IP关联?跨境卖家如何有效避免IP关联?

一位深圳卖家曾管理30个亚马逊店铺账号,某日清晨发现所有账号被批量封禁——原因竟是平台检测到这些账号长期共享同一IP地址,判定为“IP关联”。而在跨境领域如亚马逊、eBay、Shopee、TikTok等平台),对于IP关联的判定都是比较严格…

Redis集群方案——哨兵机制

Redis Sentinel(哨兵)是Redis官方提供的高可用性(HA)解决方案,用于管理Redis主从架构并实现自动故障转移。一、集群结构和作用哨兵是一个分布式系统,由多个哨兵节点组成:哨兵的作用如下:监控:Se…

1.2.3_2 TCP/IP模型

在这个视频中,我们要探讨TCP/IP模型。对于TCP/IP模型考试的要求是这样的,首先我们需要记住它各个层次的名称和顺序,以及我们需要了解TCP/IP 模型和OSI参考模型,它们在设计理念上有哪些区别,设计理念的区别又导致了TCP/…

EVOLVEpro安装使用教程-蛋白质语言模型驱动的快速定向进化

写在前面:蛋白质是生命活动的基石,其功能和序列之间的复杂关系长期以来吸引着科学家们的关注。尽管深度突变扫描等实验方法可以解析蛋白质突变的功能影响,但这些技术的应用范围局限于序列空间的一小部分。近年来,基于蛋白质语言模…

【Linux】Rocky Linux 清华镜像源安装 GitLab

使用清华镜像源安装 GitLab 地址:清华镜像源 1. 搜索 gitlab,我们选择 gitlab-ce 社区版进行安装 2. 新建 /etc/yum.repos.d/gitlab-ce.repo,内容为 注意:el$releasever 是清华镜像源内的文件夹版本 [gitlab-ce] nameGitlab C…

【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】

产品简介新能源汽车维护与动力蓄电池检测仿真教学软件是依托《全国职业院校技能大赛》“新能源汽车维修”赛项中“新能源汽车维护与动力蓄电池检测” 竞赛模块,自主开发的一款仿真教学软件。软件采用仿真技术对车辆进行指定维护作业,并对动力蓄电池总成进…

UE5多人MOBA+GAS 18、用对象池来设置小兵的队伍的生成,为小兵设置一个目标从己方出生点攻打对方出生点,优化小兵的血条UI

文章目录根据小兵队伍更换小兵的皮肤管理小兵的生成使用对象池来管理小兵的生成为小兵设置一个目标小兵生成完整代码调整一下小兵的UI根据小兵队伍更换小兵的皮肤 懒得开UE了,增加一个Minion类继承基类角色CCharacter // 幻雨喜欢小猫咪#pragma once#include &qu…

Clojure持久化数据结构的底层实现

文章目录一、Clojure的持久化数据结构二、向量(Vector)/Map的底层结构​1. HAMT 哈希数组映射字典树(1)简介(2)HAMT 的核心思想(3)HAMT 的结构​a. 基本组成​b. 树的分支因子​(4)H…