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

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

  • 查看默认的元空间大小
    在任意目录下, 执行如下的命令 , 查看所有的全局参数
    java -XX:+PrintFlagsFinal -version
    JVM常用基础参数元空间MetaspaceSize用法(附加常用JVM参数配置)_第1张图片

    可以看到默认的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

你可能感兴趣的:(面试相关,jvm)