方法区——元空间概述

方法区

不同版本具体实现

  • 标准层面:方法区(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux6.34 Kubernetes yaml文件详解

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes yaml文件详解一、yaml文件概述1.查看 api 资源版本标签2.写一个yaml文件demo 计算机系统 5G云计算 第三章 LINUX Kubernetes yaml文件详解 一、yaml文件概述 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式…

【网站搭建】开源社区Flarum搭建记录

环境 服务器系统:腾讯云 OpenCloudOS 宝塔版本:免费版8.0.1 Nginx:1.24.0 MySQL:5.7.42 PHP:8.1.21 萌狼蓝天 2023年8月7日 PHP设置 1.安装扩展:flieinfo、opcache、exif 2.解除禁用函数:putenv…

安卓:LitePal操作数据库

目录 一、LitePal介绍 常用方法: 1、插入数据: 2、更新数据: 3、删除数据: 4、查询数据: 二、LitePal的基本用法: 1、集成LitePal: 2、创建LitePal配置文件: 3、创建模型类…

【图像分类】CNN + Transformer 结合系列.4

介绍两篇利用Transformer做图像分类的论文:CoAtNet(NeurIPS2021),ConvMixer(ICLR2022)。CoAtNet结合CNN和Transformer的优点进行改进,ConvMixer则patch的角度来说明划分patch有助于分类。 CoAtN…

音视频基础:分辨率、码率、帧率之间关系

基础 人类视觉系统 分辨率 像素: 是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子;可以将像素视为整个图像中不可分割的单位或者是元素;像素…

RabbitMQ 发布确认机制

发布确认模式是避免消息由生产者到RabbitMQ消息丢失的一种手段 发布确认模式 原理说明实现方式开启confirm(确认)模式阻塞确认异步确认 总结 原理说明 生产者通过调用channel.confirmSelect方法将信道设置为confirm模式,之后RabbitMQ会返回Co…

vuejs 设计与实现 - 双端diff算法

我们介绍了简单 Diff 算法的实现原理。简单 Diff 算法利用虚拟节点的 key 属性,尽可能地复用 DOM元素,并通过移动 DOM的方式来完成更新,从而减少不断地创建和销毁 DOM 元素带来的性能开销。但是,简单 Diff 算法仍然存在很多缺陷&a…

并发三大特性和JMM

一、并发三大特性 1、原子性 一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。在Java中,对基本数据类型的读取和赋值操作是原子性操作(64位处理器)。不采取任何的原子性保障措施的自增操…

c++11 标准模板(STL)(std::basic_fstream)(三)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_fstream : public std::basic_iostream<CharT, Traits> 类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_i…

Cadvisor+InfluxDB+Grafan+Prometheus(详解)

目录 一、CadvisorInfluxDBGrafan案例概述 &#xff08;一&#xff09;Cadvisor Cadvisor 产品特点&#xff1a; &#xff08;二&#xff09;InfluxDB InfluxDB应用场景&#xff1a; InfluxDB主要功能&#xff1a; InfluxDB主要特点&#xff1a; &#xff08;三&#…

MyCat配置文件schema.xml讲解

1.MyCat配置 1.1 schema标签 如果checkSQLschema配置的为false&#xff0c;那么执行DB01.TB_ORDER时就会报错&#xff0c;必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询&#xff0c;列表查询模式默认为100,最多只查询100条。因为用mycat后默认数…

linux自定义网络访问规则

1.更改防火墙默认区域为trusted firewall-cmd --set-default-zonetrusted 2.新建一个zone&#xff0c;将想要访问本机80端口的ip&#xff0c;如&#xff1a;192.168.3.99 &#xff0c;添加的这个zone中&#xff0c;同时在这个zone中放行80端口。 firewall-cmd --permanent --ne…

SEO搜索引擎优化

目录 场景 内部业务To B (Business-to-Business&#xff0c;B2B)需要降低SEO&#xff0c;反爬 客户业务To C (Business-to-Consumer&#xff0c;B2C)需要提高SEO TDK优化 Title&#xff08;标题&#xff09; Description&#xff08;描述&#xff09; Keywords&#xff…

windows 安装免费3用户ccproxy ubuntu 代理上网

Windows 上进行安装 ubuntu 上进行设置 方法一 (临时的手段) 如果仅仅是暂时需要通过http代理使用apt-get&#xff0c;您可以使用这种方式。 在使用apt-get之前&#xff0c;在终端中输入以下命令&#xff08;根据您的实际情况替换yourproxyaddress和proxyport&#xff09;。 终…

布谷鸟配音:一站式配音软件

这是一款智能语音合成软件&#xff0c;可以快速将文字转换成语音&#xff0c;拥有多种真人模拟发音&#xff0c;可以选择不同男声、女声、童声&#xff0c;以及四川话、粤语等中文方言和外语配音&#xff0c;并且可对语速、语调、节奏、数字读法、多音字、背景音等进行全方位设…

初识Container

1. 什么是Container&#xff08;容器&#xff09; 要有Container首先要有Image&#xff0c;也就是说Container是通过image创建的。 Container是在原先的Image之上新加的一层&#xff0c;称作Container layer&#xff0c;这一层是可读可写的&#xff08;Image是只读的&#xff0…

Mybatis-Plus使用updateById()、update()将字段更新为null

文章目录 一、问题背景二、问题原因三、解决方案1. 设置全局的field-strategy2. 对某个字段设置单独的field-strategy3. 使用UpdateWrapper方式更新&#xff08;推荐使用&#xff09; 本文主要介绍了Mybatis-Plus使用updateById()、update()将字段更新为null&#xff0c;文中通…

Redis 6.5 服务端开启多线程源码

redis支持开启多线程&#xff0c;只有从socket到读取缓冲区和从输出缓冲区到socket这两段过程是多线程&#xff0c;而命令的执行还是单线程&#xff0c;并且是由主线程执行 借鉴&#xff1a;【Redis】事件驱动框架源码分析&#xff08;多线程&#xff09; 一、main启动时初始化…

freeswitch的mod_xml_curl模块动态获取dialplan

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 mod_xml_curl模块支持从web服务获取xml配置&#xff0c;本文介绍如何动态获取dialplan配置。 环境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitch&#xff1a;v1.6.20 GCC&#xff1a;4.8.5…

HTTPS安全通信

HTTPS,TLS/SSL Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure Sockets Layer)协议用于对Http协议传输的数据进行加密,保证会话过程中的安全性。 使用TCP端口默认为443 TLS:(Transport Layer Security,传输层…