【JVM基础05】——组成-能不能解释一下方法区?

目录

  • 1- 引言:方法区概述
    • 1-1 方法区是什么?(What)
    • 1-2 为什么用方法区?方法区的作用 (Why)
  • 2- ⭐核心:详解方法区(How)
    • 2-1 能不能解释一下方法区?
    • 2-2 元空间内存溢出问题
    • 2-3 什么是常量池?
    • 2-4 运行时常量池
  • 3- 小结:
    • 3-1 什么是方法区?方法区的作用?
    • 3-2 介绍一下运行时常量池?


1- 引言:方法区概述

1-1 方法区是什么?(What)

  • 方法区是 Java 虚拟机中的一个运行时数据区,它是各个线程共享的内存区域,主要用于存储类的信息和运行时常量池。
  • 方法区在 Java 虚拟机启动时创建,在虚拟机关闭时释放。具体存储内容包括类的结构、方法、字段以及运行时常量池的信息。
    • 在 JDK 8之前,方法区存储在堆中的永久代区域
    • 在 JDK 8之后,永久代被移除,改为元空间,使用的是操作系统的本地内存

image.png

1-2 为什么用方法区?方法区的作用 (Why)

  • ① 存储类信息:方法区存储所有被加载类的结构信息,包括类名、访问修饰符、字段描述、方法描述等。这些信息在类加载时会被读取并存储到方法区,以便于虚拟机执行相应的操作。
  • ② 存储运行时常量池:运行时常量池是方法区的重要组成部分,包含了编译期间生成的各种字面量和符号引用。当类被加载时,常量池的信息会被加载到运行时常量池,并将符号地址转换为真实的内存地址,以便在程序运行时进行快速查找和执行。
  • ③ 支持类加载和卸载:方法区在类加载时创建,在类卸载时释放存储空间。它的存在使得Java虚拟机可以动态加载和卸载类,从而支持Java的动态性和扩展性。

2- ⭐核心:详解方法区(How)

2-1 能不能解释一下方法区?

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

image.png


2-2 元空间内存溢出问题

  • 以下代码演示了通过动态生成和加载类来导致Java虚拟机的元空间(Metaspace)内存溢出(java.lang.OutOfMemoryError: Metaspace)的情况。

在没有设置元空间大小上限的情况下

  • 以下代码的执行是没有错误的

**如果设置了 **-XX:MaxMetaspaceSize=8m

  • 此时会抛出 java.lang.OutOfMemoryError: Metaspace异常
/*** 演示元空间内存溢出 java.lang.OutOfMemoryError: Metaspace* -XX:MaxMetaspaceSize=8m*/
public class MetaspaceDemo extends ClassLoader { // 可以用来加载类的二进制字节码public static void main(String[] args) {MetaspaceDemo test = new MetaspaceDemo();for (int i = 0; i < 10000; i++) {// ClassWriter 作用是生成类的二进制字节码ClassWriter cw = new ClassWriter(0);// 版本号,public,类名,包名,父类,接口cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Class" + i, null, "java/lang/Object", null);byte[] code = cw.toByteArray();// 执行类的加载test.defineClass("Class" + i, code, 0, code.length); // Class 对象}}
}

2-3 什么是常量池?

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

image.png

  • 字符串常量池(String Constant Pool)是Java虚拟机中的一个特殊内存区域,用于存储字符串字面量。

image.png

  • 一个Java方法的机器指令想要执行,则需要他要去查表,翻译到常量池中去找到对应的地址进行翻译,然后最终才能去执行当前的指令。

2-4 运行时常量池

  • 常量池是 .class 文件中的,当该类被加载,它的常量池信息就会 放入运行时常量池,并把里面的符号地址变为真实地址*

image.png


3- 小结:

3-1 什么是方法区?方法区的作用?

在这里插入图片描述


3-2 介绍一下运行时常量池?

在这里插入图片描述

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

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

相关文章

SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)

上一章讲了计划运行的5大步骤中的前两步&#xff0c;计算净需求和计算批量大小。 SAP PP学习笔记30 - 计划运行的步骤1 - Net requirements calculation 计算净需求(主要讲了安全库存要素)&#xff0c;Lot-size calculation 计算批量大小-CSDN博客 本章继续讲计划运行的后面几…

360:从安全卫士到智能生活——一个科技巨头的成长之路

自2005年成立以来&#xff0c;360公司&#xff0c;全称北京奇虎科技有限公司&#xff0c;已经成为中国乃至全球科技领域的一股不可忽视的力量。从最初的互联网安全服务提供商&#xff0c;到如今涉足智能硬件、云计算、大数据、人工智能等领域的多元化科技公司&#xff0c;360的…

**卷积神经网络典型CNN**

LeNet&#xff1a;最早用于数字识别的CNN AlexNet&#xff1a;2012年ILSVRC比赛冠军&#xff0c;远超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多层小卷积叠加来替换单个的大卷积 ZF Net&#xff1a;2013ILSVRC冠军 GoogleNet&#xff1a;2014ILSVRC冠军 VGGNet&a…

Unity UGUI 之 自动布局组件

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是自动布局组件…

【Node.js入门精要】从零开始的开发之旅

说明文档&#xff1a;Node.js 教程_w3cschool 概念 Node.js 是一个开源、跨平台的 JavaScript 运行时环境&#xff0c;基于 Chrome 的 V8 引擎构建&#xff0c;专为构建高性能和可扩展的网络应用程序而设计的服务端语言。它采用事件驱动、非阻塞 I/O 模型&#xff0c;能够处理大…

GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC]

文章目录 GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内…

Unity UGUI 之 Mask

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是遮罩 遮罩是一…

运算符 、、|、|| 、短路符【|| 、】<< 、>>

》》》&&是逻辑与运算符&#xff0c;|| 是逻辑或运算符 &#xff01;是逻辑非运算符 逻辑与运算符&#xff1a;全为真&#xff08;1&#xff09;即结果为真&#xff08;1&#xff09;&#xff0c;一个为假即全为假&#xff08;0&#xff09; 逻辑或运算符&#xff1a;…

shell循环语句

一&#xff0c; 循环语句 1.for循环语句 读取不同的变量值&#xff0c;用来逐个执行同一组命令 格式 for 变量名 in 取值列表 do 命令序列 done 1.1 列表循环 [rootlocalhost /home]# vim demo32.sh #!/bin/bash for i in {a..c} doecho $i done ~ [rootlocalhost /ho…

数据结构·AVL树

1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果存数据时接近有序&#xff0c;二叉搜索将退化为单支树&#xff0c;此时查找元素效率相当于在顺序表中查找&#xff0c;效率低下。因此两位俄罗斯数学家 G.M.Adelson-Velskii 和E.M.Landis 在1962年发明了一种解…

Pytorch深度学习实践(5)逻辑回归

逻辑回归 逻辑回归主要是解决分类问题 回归任务&#xff1a;结果是一个连续的实数分类任务&#xff1a;结果是一个离散的值 分类任务不能直接使用回归去预测&#xff0c;比如在手写识别中&#xff08;识别手写 0 − − 9 0 -- 9 0−−9&#xff09;&#xff0c;因为各个类别…

了解Java虚拟机(JVM)

前言&#x1f440;~ 上一章我们介绍网络原理相关的知识点&#xff0c;今天我们浅浅来了解一下java虚拟机JVM JVM&#xff08; Java Virtual Machine &#xff09; JVM内存区域划分 方法区/元数据区&#xff08;线程共享&#xff09; 堆&#xff08;线程共享&#xff09; 虚…

iOS object-C 解答算法:找到所有数组中消失的数字(leetCode-448)

找到所有数组中消失的数字(leetCode-448) 题目如下图:(也可以到leetCode上看完整题目,题号448) 光看题看可能有点难以理解,我们结合示例1来理解一下这道题. 有8个整数的数组 nums [4,3,2,7,8,2,3,1], 求在闭区间[1,8]范围内(即1,2,3,4,5,6,7,8)的数字,哪几个没有出现在数组 …

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…

网闸(Network Gatekeeper或Security Gateway)

本心、输入输出、结果 文章目录 网闸(Network Gatekeeper或Security Gateway)前言网闸主要功能网闸工作原理网闸使用场景网闸网闸(Network Gatekeeper或Security Gateway) 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助…

c++如何理解多态与虚函数

目录 **前言****1. 何为多态**1.1 **编译时多态**1.1.1 函数重载1.1.2 模板 **1.2 运行时多态****1.2.1 虚函数****1.2.2 为什么要用父类指针去调用子类函数** **2. 注意****2.1 基类的析构函数应写为虚函数****2.2 构造函数不能设为虚函数** **本文参考** 前言 在学习 c 的虚…

C++ | Leetcode C++题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; class Solution { public:int hIndex(vector<int>& citations) {int n citations.size();int left 0, right n - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > n - mid) {right m…

全球“微软蓝屏”事件:IT基础设施韧性与安全性的考验

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

git配置环境变量

一.找到git安装目录 打开此git安装目录下的bin文件&#xff0c;复制此文件路径 二.配置环境变量 2.1 右键点击此电脑的属性栏 2.2 点击高级系统配置 2.3 点击环境变量 2.4 按图中步骤进行配置 三.配置完成 win r 输入cmd打开终端 终端页面中输入 git --version 如图所示…

20240725java的Controller、DAO、DO、Mapper、Service层、反射、AOP注解等内容的学习

在Java开发中&#xff0c;‌controller、‌dao、‌do、‌mapper等概念通常与MVC&#xff08;‌Model-View-Controller&#xff09;‌架构和分层设计相关。‌这些概念各自承担着不同的职责&#xff0c;‌共同协作以构建和运行一个应用程序。‌以下是这些概念的解释&#xff1a;‌…