方法区——元空间概述

news2024/11/16 9:22:23

方法区

不同版本具体实现

  • 标准层面:方法区(Method Area)
  • 具体实现层面:
    • ≤JDK1.6 永久代
    • =JDK1.7 永久代仍然存在,但是已经开始提出:去永久代
    • ≥JDK1.8元空间(Meta Space)

永久代概念辨析:

  • 从堆空间角度来说
    • 新生代:从标准和实现层面都确定属于堆
    • 老年代:从标准和实现层面都确定属于堆
    • 永久代
      • 名义上属于堆
      • 实现上不属于堆
  • 从方法区角度来说
    • 方法区的具体实现:JDK 版本 ≤ 1.7 时,使用永久代作为方法区。
    • 方法区的具体实现:JDK 版本 ≥ 1.8 时,使用元空间作为方法区。

images

元空间是什么

本身含义:万物初始,一件事情的源头或基本组成部分。

举例:元素、元始天尊、每年1月称为元月、1月1日称为元旦、元认知、元无知、元知识

对比类和对象,类相当于是对象的元信息。

JVM(Java虚拟机)内存分为堆内存、方法区、虚拟机栈、本地方法栈和程序计数器。其中,方法区被JDK1.8之后的版本取代,而元空间(Metaspace)则被引入。

元空间是一块本地内存,它用于存放类的元数据,例如类名、访问修饰符、字段、方法、注解等信息。这些信息在程序运行期间保持不变,存储在元空间中可以提高程序的运行效率。

元空间由Java虚拟机主动管理,可以将其看作是一块特殊的堆内存。相比于方法区,元空间的内存可调,可以使用-Xmx设置内存上限,且可以在适当的情况下自动进行垃圾回收。

元空间一般设置多大

在JVM中,元空间一般设置较大的内存空间才能满足应用程序对于类元数据的要求。根据应用程序的需要和计算机的硬件资源,可以根据实际情况进行内存的设置。

在JDK1.8版本中,元空间在Windows上的默认大小为21MB,而在Linux上则为24MB。如果元空间的内存已经不足,JVM会自动进行内存扩容。

一般来说,为了避免内存耗尽的风险,建议将元空间内存设置在256MB到1GB之间。

元空间和直接内存

JVM中元空间和直接内存是两个不同的概念。直接内存(Direct Memory)是为了手动分配Native内存而引入的,它与元空间不同。元空间是为了存储类的元数据而产生的。

直接内存是通过在Java堆外分配内存来实现,不受JVM的垃圾回收管理。而元空间是在线程栈和程序计数器之外的一部分虚拟机内存中。

元空间内存大小

在JDK1.8之前,JVM中的方法区是有内存大小限制的,大小由-Xmx及-XX:MaxPermSize设置,通常默认为64MB。而在JDK1.8版本之后,元空间的内存大小和直接内存一样,并且是可以进行动态调整的,不再受到固定的限制。

需要注意的是,在JVM的默认配置下,元空间的内存大小只有21MB。如果存储的类元数据过多,需要增加元空间的内存大小。可以使用JVM命令行参数-XX:MetaspaceSize设置元空间的初始大小,使用-XX:MaxMetaspaceSize设置元空间的最大大小。

    -XX:MetaspaceSize=256m
    -XX:MaxMetaspaceSize=1024m

元空间大小设置

在JVM中,我们可以通过调整元空间内存大小来优化内存使用效率。下面是几个常用的内存大小设置参数:

  •  -XX:MetaspaceSize设置元空间的初始大小
  •  -XX:MaxMetaspaceSize设置元空间的最大大小
  • -XX:MinMetaspaceFreeRatio设置最小空闲空间比率,缺省值为40%
  • -XX:MaxMetaspaceFreeRatio设置最大空闲空间比率,缺省值为70%

需要注意的是,这些参数的设置需要根据具体应用程序的需求和运行情况进行调整,避免出现内存不足的情况。

元空间存放什么内容

  • 类信息:类中定义的构造器、接口定义
  • 静态变量(类变量)
  • 常量
  • 运行时常量池
  • 类中方法的代码

JVM元空间主要存储类的元数据信息,包括Java类名、字段、方法、注解等信息。这些信息在程序运行期间保持不变,可以存储在元空间中。

需要注意的是,元空间存储的不是Java类本身,而是Java类的元数据。Java类本身存储在Java堆内存中,而这些元数据则被存储在元空间中。

由于元空间存储的是类的元数据信息,因此当加载类的时候,元空间会增加内存使用。当卸载类的时候,元空间会释放相应的内存。

元空间占用JVM内存吗

在JVM中,元空间是一块本地内存,不属于Java堆内存。因此,元空间不占用Java堆内存,也不会被JVM的垃圾回收管理。

需要注意的是,元空间的内存使用情况仍然对应用程序的内存使用情况产生影响。因此,当应用程序需要使用的类元数据过多时,需要增加元空间的内存大小,以避免出现内存不足的情况。

元空间什么时候会进行垃圾回收

在JVM中,元空间不属于Java堆内存,不受JVM的垃圾回收管理。如果元空间的内存不足,JVM会自动进行内存扩容。

需要注意的是,元空间对内存使用情况的监控需要由Java虚拟机主动管理,可能会影响程序的性能。因此,在合适的情况下,可以手动对元空间进行内存回收。

可以使用JVM命令行参数-XX:MetaspaceSize和-XX:MaxMetaspaceSize设置元空间的大小,并调整GC参数,以控制元空间内存的使用情况。

    -XX:MetaspaceSize=256m
    -XX:MaxMetaspaceSize=1024m
    -XX:+UseG1GC
    -XX:MaxGCPauseMillis=200

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

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

相关文章

【torch.nn.Fold】和【torch.nn.Unfold】

文章目录 torch.nn.Unfold直观理解官方文档 toch.nn.Fold直观理解官方文档 torch.nn.Unfold 直观理解 torhc.nn.Unfold的功能: 从一个batch的样本中,提取出滑动的局部区域块patch(也就是卷积操作中的提取kernel filter对应的滑动窗口&#…

C语言基础(持续更新)

常用函数 strrchr 描述 C 库函数 char *strrchr(const char *str, int c) 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。测试代码 #include "stdio.h" #include "string.h"int main() {printf(&q…

Ubuntu18.04中QGroundControl安装及添加到应用程序

Ubuntu18.04中QGroundControl安装及添加到应用程序 Ubuntu18.04中QGroundControl安装及添加到应用程序教程 目录 Ubuntu18.04中QGroundControl安装及添加到应用程序QGroundControl下载安装一、设置用户权限二、安装必要扩展包三、注销并再次登录以启用对用户权限的更改四、下…

pgsql查询某表所有字段

查询某表所有字段 查询某表所有字段 select * from information_schema.columns where table_schema模式名称 and table_name表名;模式 查询某表字段个数 select count(*) from information_schema.columns where table_schema模式名称 and table_name表名;

4.2 Windows终端数据安全

数据参考:CISP官方 目录 系统备份与还原数据备份数据粉碎数据加密 一、系统备份与还原 为什么需要系统备份 系统越用越慢系统故障导致不稳定系统无法登录 系统备份重新部署 (重装系统、重置系统) 丟失配置,需要重新配置个人数据丢失的风险 系统…

2023-08-09 LeetCode每日一题(整数的各位积和之差)

2023-08-09每日一题 一、题目编号 1281. 整数的各位积和之差二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例1: 示例2: 提示: 1 …

记一次空间告警与pg_rman keep-data-days参数研究

一、 背景 收到一个磁盘空间告警,检查发现是本地备份保留比较多导致的,处理过程倒很简单,手动清理掉旧的备份(已自动备到远端服务器),告警就恢复了。 但是检查备份脚本的时候,发现keep-data-day…

WPF实战项目十一(API篇):待办事项功能api接口

1、新建ToDoController.cs继承基础控制器BaseApiController,但是一般业务代码不写在控制器内,业务代码写在Service,先新建统一返回值格式ApiResponse.cs: public class ApiResponse{public ApiResponse(bool status, string mess…

科技云报道:一波未平一波又起?AI大模型再出邪恶攻击工具

AI大模型的快速向前奔跑,让我们见识到了AI的无限可能,但也展示了AI在虚假信息、深度伪造和网络攻击方面的潜在威胁。 据安全分析平台Netenrich报道,近日,一款名为FraudGPT的AI工具近期在暗网上流通,并被犯罪分子用于编…

数据包传输方式:单播、多播、广播、组播、泛播

数据包传输方式 单播、多播、广播、组播、泛播 网络中假设X代表所有的机器,Y代表X中的一部分机器,Z代表一组机器,1代表一台机器,那么 1:1 那就是单播;1:Y 那就是多播;1&#xff1…

mysql数据库如何转移到oracle

mysql数据库转移到oracle 在研发过程中,可能会用到将表数据库中的表结构及数据迁移到另外一种数据库中, 比如说从mysql中迁移到oracle中, 常用的方法有好些,如下 1、使用powerdesigner,先连接mysql然后生成mysql的p…

springboot启动忽略某些类

springboot启动忽略某些类 描述解决方案单拉一个提交,把所有的涉及kafka消费的都不注入容器通过配置ComponentScan的excludeFilters配置了不生效后续处理改之前改之后解释 总结 拆分环境 感触解决实现demo参考 描述 目前我这的开发环境和测试环境数据库是两份&#…

webshell免杀项目-潮影在线免杀平台(六)

平台地址: http://bypass.tidesec.com/web/ 注:需要先注册一个用户登录后才能使用该平台

RK3588平台开发系列讲解(进程篇)Linux进程IPC:管道的使用及原理

文章目录 一、什么是管道二、匿名管道和命名管道 如何进行选择三、管道使用案例四、管道的原理沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 今天介绍Linux进程IPC管道。 一、什么是管道 顾名思义,通常管道就是你家一端连接着水池,另一端连着水龙头的、能流通水的…

算法练习--字符串相关

文章目录 计算字符串最后一个单词的长度计算某字符出现次数明明的随机数回文字符串回文数字无重复字符的最大子串长度有效的括号罗马数字转整数字符串通配符杨辉三角查找两个字符串a,b中的最长公共子串 **找出字符串中第一个只出现一次的字符 计算字符串最后一个单词的长度 pe…

【C++】继承的概念和简单介绍、基类和派生类对象复制转换、继承中的作用域、派生类的默认成员函数

文章目录 继承1.继承的概念和简单介绍1.1继承的概念1.2继承的定义 2.基类和派生类对象复制转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员 继承 1.继承的概念和简单介绍 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最…

深入理解Jdk5引入的Java泛型:类型安全与灵活性并存

深入理解Jdk5引入的Java泛型:类型安全与灵活性并存 ​ 在Java的中,有一个强大的工具,它可以让你在编写代码时既保持类型安全,又享受灵活性。**这个工具就是——泛型(Generics)。**本文将引导你深入了解Java…

小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)

一、概述 Kubernetes(简称K8S)是一个开源的容器编排和管理平台,是由Google发起并捐赠给Cloud Native Computing Foundation(CNCF)管理的项目。它的目标是简化容器化应用的部署、扩展、管理和自动化操作。 以下是Kube…

【D3S】集成smart-doc并同步配置到Torna

目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S(DDD with SpringBoot)为本作者使用DDD过程中开发的框架,目前已可公开查看源码&#…

leetcode26-删除有序数组中的重复项

双指针—快慢指针 慢指针 slow 走在后面&#xff0c;快指针 fast 走在前面探路&#xff0c;找到一个不重复的元素的时候就让slow前进一步并赋值给它。 流程&#xff1a; 代码 class Solution { public:int removeDuplicates(vector<int>& nums) {int slow 0, fas…