java内存问题

 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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值