【jvm】方法区的理解

目录

          • 1. 说明
          • 2. 方法区的演进
          • 3. 内部结构
          • 4. 作用
          • 5.内存管理

1. 说明
  • 1.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。它是各个线程共享的内存区域。
  • 2.尽管《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区分开来。
  • 3.与Java堆一样,方法区是各个线程共享的内存区域。
  • 4.JVM方法区是Java虚拟机内存结构中的一个重要组成部分,它用于存储类的元数据、常量池、方法信息和静态变量等。
  • 5.随着JDK版本的演进,方法区的实现方式也在不断变化,但其在Java虚拟机中的作用和地位始终不变。
2. 方法区的演进
  • 1.永久代(PermGen):在JDK 1.7及以前,HotSpot JVM使用永久代来实现方法区。这种方式下,方法区的内存管理类似于Java堆,但存在内存溢出的风险,因为永久代有上限(通过参数-XX:MaxPermSize设置,即使不设置也会有默认大小)。
  • 2.元空间(MetaSpace):从JDK 8开始,HotSpot JVM改用元空间来实现方法区。元空间使用本地内存(Native Memory),由操作系统直接管理,因此其空间上限与操作系统相关。当大量加载类时,不用担心方法区溢出。元空间的使用可以通过参数-XX:MetaSpaceSize和-XX:MaxMetaSpaceSize来调整其初始大小和最大容量。
3. 内部结构
  • 1.类型信息:存储每个加载的类(Class)、接口(interface)、枚举(enum)、注解(annotation)的类型信息,包括类型的完整有效名称、直接父类的完整有效名称、直接接口的序列集以及类型的修饰符。
  • 2.域信息:存储类的所有域信息,包括域名称、域类型、域修饰符。
  • 3.方法信息:存储方法的相关信息,包括方法名、方法返回类型、方法的参数的数量和类型、方法的字节码、方法的修饰符以及方法的异常表。
  • 4.运行时常量池:方法区的一部分,用于存储编译期生成的各种字面量和符号引用,包括字符串、数字、类和方法的符号引用等。在类加载后,字节码文件中的常量池会被加载到运行时常量池中,供运行时使用。
4. 作用
  • 1.方法区在Java虚拟机内存中扮演了类的元数据存储和管理的角色。
  • 2.它不仅保存了类的结构信息,还包括了支持类运行时行为的相关数据。
  • 3.方法区的设计使得虚拟机能够高效地加载、存储和管理类信息,保证类的正确性和一致性。
5.内存管理
  • 1.内存分配:方法区的内存大小通常由JVM的启动参数控制。在JDK 8及以后,由于元空间使用本地内存,因此其内存分配更加灵活。
  • 2.垃圾回收:方法区也会进行垃圾回收,主要回收不再存活的类信息。当方法区无法满足内存分配请求时,会抛出OutOfMemoryError异常。

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

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

相关文章

大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 拦截器实现 Java

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

编译OpenCV的速度,家里和公司的电脑相差很大

这一段时间,研究OpenCV带ffmpeg的编译问题。然后发现,同样是虚拟机,编译速度,家里的电脑明显比公司慢多了。 都是在SSD上。虚拟机内存,家里是16G,公司是8G。CPU,家里是E5 2667,公司…

Qt 的 QThread:多线程编程的基础

Qt 的 QThread:多线程编程的基础 在现代应用程序中,尤其是需要处理大量数据、进行长时间计算或者进行 I/O 操作时,多线程编程变得至关重要。Qt 提供了一个功能强大且易于使用的线程类 QThread,可以帮助开发者在 Qt 应用程序中实现…

Java 线程池介绍与实践

文章目录 引言概念优势Java 中的线程池实现线程池的核心参数1. corePoolSize:核心线程数2. maximumPoolSize:最大线程数3. keepAliveTime:线程空闲时间4. unit:时间单位5. workQueue:任务队列6. threadFactory&#xf…

富格林:安全指正规防欺诈套路

富格林指出,在现货黄金投资操作中,有众多的投资技巧和投资方式,但其实并不是所有的都适用。投资者应该注意选择安全、可信的投资方式去规防欺诈套路。值得提醒的是,现货黄金虽然拥有很多获利的机会,但也有不少欺诈套路…

PyAEDT:Ansys Electronics Desktop API 简介

在本文中,我将向您介绍 PyAEDT,这是一个 Python 库,旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写,从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…

SpringBoot(二十六)SpringBoot自定义注解

注解在springboot日常开发中使用的频率是很高的,官方为我们提供了很多注解,比如:@Autowired、@GetMapping等…… 但是我们有些特定的需求官方提供的注解是没有的。我们可以自定义注解。 下面我们来了解一下自定义注解的过程。 一:元注解 Java为我们提供了几个元注解来自定…

DHTMLX-gantt组件显示不同的颜色

在 dhtmlxGantt 组件中,你可以通过自定义任务的颜色来显示不同的任务类型或状态。这通常通过配置任务的 color 属性来实现。你可以在初始化 Gantt 图表时或在动态添加任务时设置这个属性。 以下是一些常见的方法来为任务设置不同的颜色: 1. 初始化时设…

什么是迭代器?Python迭代器及其用法

迭代器是一种对象,它表示一个数据流,可以一次访问一个成员(元素)。 迭代器从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 在Python中,迭代器是一个实现了迭代协议的…

什么是C++中的友元函数和友元类?

友元函数(Friend Function)和 友元类(Friend Class)是用于控制类的访问权限的机制。这允许特定的函数或类访问另一个类的私有成员和保护成员,打破了 C 的封装性规则。 友元函数 定义 友元提供了不同类的成员函数之间…

深入理解 CSS 属性 pointer-events: none

pointer-events 是 CSS 中一个用于控制元素响应鼠标事件(或触摸事件)的属性。 通过这个属性,我们可以控制元素是否能够接受鼠标事件,例如点击、悬停、拖动等。 其中,pointer-events: none 是 pointer-events 属性的一…

定时器(QTimer)与随机数生成器(QRandomGenerator)的应用实践——Qt(C++)

一、QTimer与QRandomGenerator (一)QTimer(定时器)[2] QTimer类为定时功能提供了一个高级编程接口。在使用QTimer时,实例化一个QTimer对象并将其timeout()发射信号与合适的信号槽相连接。通过调用QTimer的start()函数…

用redis的zset实现日榜,周榜,月榜

思路&#xff1a; 1.初始化一个月的数据&#xff1a; /*** 初始化一个月数据*/Testpublic void initMonthData(){//计算当前时间小时的keylong hourSystem.currentTimeMillis()/(1000*60*60);for(int i1;i<24*30;i){String key"W_hour"(hour-i);Random random new…

《MySQL 实战教程:从零开始到高手进阶》

当然可以。下面是一篇关于MySQL的学习指南&#xff0c;它适合初学者到中级用户&#xff0c;涵盖了MySQL的基础知识、安装步骤、基本命令以及一些高级功能。 MySQL 学习指南 1. 了解 MySQL MySQL 是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典…

通过shell脚本分析部署nginx网络服务

通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 [rootlocalhost xzy]# vim 1.sh [rootlocalhost xzy]# chmod x 1.sh [rootlocalhost xzy]# ./1.sh2.判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&…

威胁驱动的网络安全方法论

摘要 目前的网络安全风险管理实践很大程度上是由合规性要求驱动的&#xff0c;这使得公司/组织不得不在安全控制和漏洞上投入人力/物力。&#xff08;风险管理涉及多个方面&#xff0c;包括资产、威胁、漏洞和控制&#xff0c;并根据事故发生的可能性及造成的影响进行评估。威…

『VUE』30. 生命周期的介绍(详细图文注释)

目录 生命周期生命周期的8阶段生命周期小例子总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 生命周期 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xf…

在 Unix 和类 Unix 操作系统中,信号是一种异步的通知机制,用于通知进程发生了一些特定的事件。

在 Unix 和类 Unix 操作系统中&#xff0c;信号是一种异步的通知机制&#xff0c;用于通知进程发生了一些特定的事件。以下是一些常见的信号及其用途和默认行为的详细介绍&#xff1a; 常见信号及其用途 SIGINT (2) 含义&#xff1a;中断信号&#xff08;Interrupt Signal&…

idea 通过git撤销commit但未push的操作

1、undo commit 适用情况&#xff1a;代码修改完了&#xff0c;已经Commit了&#xff0c;但是还未push&#xff0c;然后发现还有地方需要修改不想提交本次记录了。这时可以进行Undo Commit&#xff0c;修改后再重新Commit。注意&#xff1a;如果已经进行了Push&#xff0c;线上…

【graphics】图形绘制 C++

众所周知&#xff0c;周知所众&#xff0c;图形绘制对于竞赛学僧毫无用处&#xff0c;所以这个文章&#xff0c;专门对相关人员教学&#xff08;成长中的码农、高中僧、大学僧&#xff09;。 他人经验教学参考https://blog.csdn.net/qq_46107892/article/details/133386358?o…