GC算法优缺点:
1.复制移动: 好处没有内存碎片,因为需要备份空间所以耗内存.
2.标记清除: 好处节约内存,但是筛选需要耗时长,而且有内存碎片产生
3.标记压缩: 同标记清除的算法一样,在它基础上整理有序存活对象的引用地址,让内存碎片收集起来不在碎片.
各种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岁
红色代表不能被回收的对象,黄色是可以清除的对象,GC都是Eden 和 From区都往To区搬家,然后From和To区角色互换,From变To,To变From.