在Java8及以后的版本中,我们可以使用以下命令设置元空间的初始大小和最大大小:

什么是元空间metaspace size大小?

从我们的角度来看,需要注意的是,Metaspace的默认最大大小是无限的。相反,java7及更早版本的PermGen在32位JVM上的默认最大大小为64mb,在64位JVM上为82mb。

Metaspace是否会进行收集垃圾?

一旦类元数据使用量达到“MaxMetaspaceSize”,就会触发死类和类加载器的垃圾收集。显然需要对元空间进行适当的监视和调优,以限制此类垃圾收集的频率或延迟。

什么是Java中的元空间内存?

简单地说,Metaspace是一个新的内存空间——从Java8版本开始;它取代了旧的PermGen内存空间。最大的区别在于它如何处理内存分配。因此,默认情况下,本机内存区域会自动增长。

Java8中PermGen空间的替代品是什么?

在Java8中,PermGen空间被元空间取代。PermSize和MaxPermSize JVM参数将被忽略,如果在启动时出现,则会发出警告。类元数据的大多数分配现在都是从本机内存中分配的。

PermGen是永久生成代的缩写,它是一个特殊的堆空间,它与主Java堆分开,JVM在主堆中跟踪已加载类的元数据。在Java8中,PermGen被重命名为Metaspace—有一些细微的区别。从我们的角度来看,需要注意的是Metaspace有一个无限制的默认最大大小。相反,java7及更早版本的PermGen在32位JVM上的默认最大大小为64mb,在64位版本上为82mb。当然,这些不同于初始尺寸。Java7和更早版本的初始PermGen空间大约为12-21MB。

值得一提的是,在Java7之前,内部字符串通常保存在PermGen上。

这会导致 java.lang.OutOfMemoryError:永久代内存溢出

无论何时需要调整PermGen/Metaspace的大小,JVM都会像对待标准堆一样进行调整。调整这些空间的大小需要一个完整的GC,这通常是一个昂贵的操作。它通常可以在启动时观察到,当许多类被加载时。尤其是当应用程序依赖于许多外部库时。如果在启动过程中有很多完整的gc,通常就是因为这个。在这种情况下,增加初始大小可以提高启动性能。

要增加PermGen,我们有以下命令:

-XX: PermSize=N-设置永久生成空间的初始(和最小大小)。

-XX: MaxPermSize=N-设置永久生成空间的最大大小。

在Java 8及更高版本中,我们可以使用以下命令设置元空间的初始大小和最大大小:

-XX: MetaspaceSize=N-设置元空间的初始(和最小大小)。

-XX: MaxMetaspaceSize=N-设置元空间的最大大小。

对于与Java进程在内存空间中使用的区域相关的大小调整,需要考虑以下几个方面。

Java堆:管理Java对象的空间

元空间:管理类信息的空间

其他空间:堆栈空间,以及java vm和本机方法使用的C堆空间

可以使用以下两种方法来调整上述空间的大小:

注意:

如果上面计算的元空间的最大大小小于64 MB,则该空间的最大大小将设置为64 MB。Java堆和其他空间的最大大小计算如下:将((MaxSizeFallSpaces-100MB)-64 MB)的结果分配给Java堆和其他空间,比例分别为75%和15%。

如果在Java操作环境变量中指定了设置最大大小的Java选项(无论是-Xmx还是-XX:MaxMetaspaceSize),则根据“使用Java\OPTS环境变量指定”中描述的方法确定每个空间的最大大小。

在具有高多重性的请求或具有深调用堆栈的方法的情况下,如果进程输出下面的消息并失败,则表示超出容器中的最大内存值,因此需要在“指定使用JAVA\OPTS环境变量”中描述的调优。

exit_description: out of memory, exit_status: 143

使用JAVA_OPTS环境变量指定metaspace默认大小

指定一个Java选项,该选项设置Java_OPTS环境变量中每个空间的大小。

估计每个空间所需的最大大小,并使用Java选项进行设置,以使空间的总大小不超过(maxSizeOfAllSpaces(默认为1gb)-300mb的结果)(请参阅注1)。300 MB被分配给管理Java应用程序进程的空间。

用户应该验证并负责选择正确的Java选项,而不是Java选项中的-Xmx和-XX:MaxMetaspaceSize。

注意:

请参阅下表,并确保空间的最大大小总和不超过(maxSizeOfAllSpaces(默认为1 GB)-300 MB)的结果。不要省略表中的两个Java选项,因为如果省略了指定最大大小的Java选项,java VM会自动确定最大大小。

对于剩余的空间,从(maxSizeOfAllSpaces减去maxJavaHeapSize和maxMetaspaceSize的总和-300 MB)没有Java选项来配置其他空间。

字节大小可以用-Xmx和-XX:MaxMetaspaceSize指定。以下字符可以指定为单位:

对于KB(千字节):“k”或“k”

对于MB(兆字节):“m”或“m”

对于GB(GB):“g”或“g”

java8 metaspacesize_metaspace默认大小相关推荐

  1. java8 metaspacesize_Metaspace 之三--jdk8 Metaspace 调优

    简介 jdk8的元空间的初始大小是21M,如果启动后GC过于频繁,请将该值设置得大一些. 如果应用启动时,FGC出现了,可能是由于metaspace导致,例如: 从JDK8开始,永久代(PermGen ...

  2. Java8 HashMap源码分析

    前言 今天,我们主要来研究一下在Java8中HashMap的数据结构及一些重要方法的具体实现.       研究HashMap的源代码之前,我们首先来研究一下常用的三种数据结构:数组.链表和红黑树. ...

  3. java8 GC日志分析

    @[toc] 前言 最近学习分析了一下java8的GC日志,顺便记录下来,忘性太大了 背景: java version "1.8.0_144" Java(TM) SE Runtim ...

  4. Java8 JVM参数解读

    我们知道java虚拟机启动时会带有很多的启动参数,Java命令本身就是一个多参数的启动命令.那么具体JVM启动包含哪些参数呢?这篇文章针对java8的情况做一篇汇总解读,包含大多数常见和不常见的命令参 ...

  5. 【Java源码分析】Java8的ArrayList源码分析

    Java8的ArrayList源码分析 源码分析 ArrayList类的定义 字段属性 构造函数 trimToSize()函数 Capacity容量相关的函数,比如扩容 List大小和是否为空 con ...

  6. Linux下安装Java8

    Linux(ubuntu)下Java8安装 1.下载jdk8 这个看大家了,linux版本的就可以 2.创建jvm文件夹 在根目录下创建名为jvm的文件夹(在哪里创建看个人) $ sudo mkdir ...

  7. [2017.02.23] Java8 函数式编程

    以前学过Haskell,前几天又复习了其中的部分内容. 函数式编程与命令式编程有着不一样的地方,函数式编程中函数是第一等公民,通过使用少量的几个数据结构如list.map.set,以及在这些数据结构上 ...

  8. java增加final,Java8增加功能--Effectively final 功能

    java8新增了很多功能,可以大大简化代码,这个系列将会一一辅助代码加以介绍. 局部内部类和匿名内部类访问的局部变量必须由final修饰,java8开始,可以不加final修饰符,由系统默认添加.ja ...

  9. java8的jvm优化_基于JDK8 版本的SpringBoot 启动参数优化(建议收藏)

    Linux端运行项目命令 java -jar -XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=128m-Xms1024m -Xmx1024m-Xmn256m-Xs ...

最新文章

  1. 第九代小冰惊喜登场,多端融合且琴棋书画样样精通
  2. 李开复:AI巨头是有史以来最难以打破的垄断
  3. 嵌入式LED驱动程序
  4. Zabbix SQL注入漏洞威胁预警通告
  5. 谈谈Java与大数据之间的关系你们都了解了清楚了吗?
  6. 信息学奥赛C++语言:重组
  7. JavaScript强化教程——数组的基本处理函数
  8. Linux ISATAP配置
  9. 智能云端服务器连接不了,智能云解析,智能在哪里?
  10. ArrayQueue详解(待解决)
  11. php sql注入审计,php审计基础一:sql注入
  12. 数据 到 端口 linux,linux如何查看某个端口接收到的数据
  13. 用python解决约瑟夫环
  14. 如何从0开始编写一个网络爬虫?
  15. vscode自动快捷格式化代码_vscode格式化代码快捷键_解锁格式化的快捷键
  16. 树莓派4b控制机械手臂_STM32与树莓派(上位机)交互控制机械臂
  17. n以内的最多因子数的数 n=1e18
  18. 你对Web3的迅速发展一无所知,逃离大厂去拥抱Web3
  19. 《进化——我们在互联网上奋斗的故事》一一1.11 OKRs在J公司
  20. Ruby On Rails的傻瓜安装

热门文章

  1. opencv中xml/yml文件操作类
  2. 联想x250为什么这么贵_为什么ThinkPad这么贵?
  3. php发送指令,PHP发送AT指令实例代码
  4. libgdx游戏引擎开发笔记(一)引擎介绍和Helloworld
  5. scrapy中的下载器中间件
  6. stm32与arm7比较(经典)
  7. WCF NetTcpBinding Transport安全模式(6) ClientCredentialType证书验证模式---- PeerTrust验证模式...
  8. 关于升级 xcode8
  9. Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
  10. 高才生的好帮手-Word2010(3)