目录
3.1 java.lang.StackOverflowError
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 进程编号 可以查看多个配置参数