您当前的位置: 首页 >  jvm

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JVM常用基础参数元空间MetaspaceSize用法(附加常用JVM参数配置)

java持续实践 发布时间:2020-01-11 17:00:01 ,浏览量:1

Metaspace(元空间)是java8中提出来的概念, 在java7中称为永久代. 都是对JVM规范中方法区的实现. 不过元空间与永久代之间最大的区别在于: 元空间并不存在虚拟机中, 而是使用本地内存. 因此默认的情况下, 元空间的大小仅仅受本地内存的限制.

  • 查看默认的元空间大小 在任意目录下, 执行如下的命令 , 查看所有的全局参数 java -XX:+PrintFlagsFinal -version 可以看到默认的MetaspaceSize 为21807104 , 大约为21M. 如果反复的创建对象, 那么就会导致元空间的内存溢出. 那么可以把元空间配置的大一些.
  uintx MetaspaceSize   = 21807104     {pd product}

还是使用以下的代码作为实例.

public class MyHelloGc {

    public static void main(String[] args) throws InterruptedException {

        System.out.println("***************HELLO GC");

        Thread.sleep(Integer.MAX_VALUE);
    }
}

运行上面的代码, 不做任何jvm参数的修改, 查看默认的元空间的大小. 可以查看到默认的元空间的大小为20M左右. 通过-XX:+PrintCommandLineFlags参数, 查看默认的参数大小. 运行后,控制台打印如下

-XX:InitialHeapSize=199428288 -XX:MaxHeapSize=3190852608 
-XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation 
-XX:+UseParallelGC 
***************HELLO GC

再给程序配置如下的jvm参数. 初始内存为128m, 最大内存为4个G, 初始栈的大小为1024k, 元空间为512M, 打印出GC回收的细节. UseSerialGC代表使用串行回收器. XX:+PrintCommandLineFlags 参数用于打印jvm的相关参数 . -Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC

配置完上面的参数后, 再次运行程序 , 可以看到控制台输出如下信息. 可以看到初始化堆内存大小, 最大堆内存大小, 元空间大小-XX:MetaspaceSize=536870912都发生了变化 . 垃圾回收器也发生了变化.

-XX:InitialHeapSize=134217728 -XX:MaxHeapSize=4294967296 
-XX:MetaspaceSize=536870912 -XX:+PrintCommandLineFlags 
-XX:+PrintGCDetails -XX:ThreadStackSize=1024 
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops 
-XX:-UseLargePagesIndividualAllocation -XX:+UseSerialGC 
***************HELLO GC

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0381s