深入理解JVM(2)——JVM常用参数配置、OOM

本文深入探讨了JVM的常用配置参数,包括-Xms、-Xmx、-Xss、-XX:MetaspaceSize等,并详细解析了XX参数的Boolean类型和KV设值类型。此外,还讲解了通过jinfo命令查看JVM默认值的方法。文章还着重分析了两个重要的错误:StackOverflowError和各种类型的OutOfMemoryError,提供了相应的示例和解决策略。
摘要由CSDN通过智能技术生成

目录

1.JVM常用参数配置

1.1 JVM参数的类型

1.2 XX参数详解

1.2.1 Boolean类型

1.2.2 KV设值类型

1.3 查看JVM默认值

1.3.1 第一种方式:jinfo查看当前运行程序的配置

1.3.2 第二种方式:参数命令

2.JVM中常用配置参数

2.1 -Xms和-Xmx

2.2 -Xss

2.3 -XX:MetaspaceSize

2.4 -XX:PrintGCDetails

2.5 -XX:SurvivorRatio

2.6 -XX:NewRatio

2.7 -XX:MaxTenuringThreshold

3.两个重要的错误

3.1 java.lang.StackOverflowError

3.2 OOM

3.2.1 java.lang.OutOfMemoryError:Java heap space

3.2.2 java.lang.OutOfMemoryError:GC overhead limit exceeded

3.2.3 java.lang.OutOfMemoryError:Direct buffer memory

3.2.4 java.lang.OutOfMemoryError:unable to create new native thread

3.2.5 java.lang.OutOfMemoryError:Metaspace


1.JVM常用参数配置

1.1 JVM参数的类型

JVM的参数有以下三种类型

  • 1.标配参数:从jdk1.0开始jdk12一直都有的参数,在各个版本很稳定,很少有大的变化的参数
    • -version
    • -help
    • java -showversion
  • 2.X参数
    • -Xint:解释执行
    • -Xcomp:第一次使用就编译成本地代码
    • -Xmixed:混合模式
  • 3.XX参数

1.2 XX参数详解

XX参数分为以下两种:

  • Boolean类型
  • KV设值类型

1.2.1 Boolean类型

公式:-XX:+或者-某个属性

  • +表示开启
  • -表示关闭

典型案例参数:

  • PrintGCDetails:是否打印GC收集细节
    • +PrintGCDetails:开启打印GC收集细节
    • -PrintGCDetails:不开启打印GC收集细节
  • UserSerialGC:是否使用串行垃圾回收器
    • +UserSerialGC:使用串行垃圾回收器
    • -UserSerialGC:不使用串行垃圾回收器

代码示例:

public class HelloGC {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("-------HelloGC-------");
        Thread.sleep(Integer.MAX_VALUE);
    }
}

如何查看像上述一样的一个正在运行的java程序,它的某个jvm参数是否开启?具体值是多少?

  • jps+jinfo,使用如下:

1.2.2 KV设值类型

公式:-XX:属性key=属性值value

典型案例:

  • -XX:MetaspaceSize=128m
  • -XX:MaxTenuringThreshold=15
  • 注意以下两个是我们常用的,所以有对应等价的简化写法:
    • -XX:InitialHeapSize=10m    等价于 -Xms10m
    • -XX:MaxHeapSize=10m    等价于 -Xmx10m

代码示例:继续使用上面的程序

public class HelloGC {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("-------HelloGC-------");
        Thread.sleep(Integer.MAX_VALUE);
    }
}

1.3 查看JVM默认值

1.3.1 第一种方式:jinfo查看当前运行程序的配置

公式:jinfo -flag 配置项 进程编号

使用 jinfo -flags 进程编号 可以查看多个配置参数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值