各种OOM的情况
1. 堆溢出-java.lang.OutOfMemoryError: Java heap space。
2. 栈溢出-java.lang.OutOfMemorryError。
3. 栈溢出-java.lang.StackOverFlowError。
4. 元信息溢出-java.lang.OutOfMemoryError: Metaspace。
5. 直接内存溢出-java.lang.OutOfMemoryError: Direct buffer memory。
6. GC超限-java.lang.OutOfMemoryError: GC overhead limit exceeded。
查看jvm进程:jps
查看jvm堆内存情况:jmap -heap 进程号
查看堆内存中的对象数目:jmap -histo:live 进程号 | more
查看实时cpu、内存情况:top
查看内存:cat /proc/meminfo
java -jar -Xms128M -Xmx256M -XX:PermSize=128M -XX:MaxPermSize=256M ***.jar
Xms : 堆内存初始大小
Xmx : 堆内存最大值
PermSize : 永久内存初始大小
MaxPermSize : 永久内存最大值
1. StackOverflowError 修改参数: -Xss 2m
定义:由于方法的深度调用,导致栈内存不足,报栈内存溢出错误,程序员无法软处理.
注意代码中是否有了循环调用方法而无法退出的情况
package com.daqi.login.demo.utils;
/**
* User: ldj
* Date: 2023/5/25
* Time: 16:31
* Description: No Description
*/
public class StackOverErrorTest {
private int i = 1;
public void stackOver() {
//递归调用到栈空间不足,就会抛StackOverflowError
System.out.println(i++);
stackOver();
}
public static void main(String[] args) {
StackOverErrorTest stack = new StackOverErrorTest();
stack.stackOver();
}
}
2. OutOfMemoryError: Java heap space
内存分配不足
package com.daqi.login.demo.utils;
import java.util.Random;
/**
* User: ldj
* Date: 2023/5/25
* Time: 16:44
* Description: No Description
*/
public class OmmTest {
public static void main(String[] args) {
System.out.println("cpu核心数: " + Runtime.getRuntime().availableProcessors());
System.out.println("-Xmx:" + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");
System.out.println("-Xms:" + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");
//1024 B = 1 KB ; 1024 KB = 1 MB ; 1024 MB = 1 GB
//byte[] b = new byte[11 * 1024 * 1024];
String str = "hello";
while (true) {
str += str + new Random().nextInt(88888888) + new Random().nextInt(999999999);
System.out.println(str);
}
}
}
-XX:MaxTenuringThreshoid -------设置对象在新生代中存活次数,默认是15岁