JVM常见的三种问题

  • 大家想必也知道Java中的JDK、JRE是用来配置环境,利于开发的。
  • JDK最早源于OpenJDK(开源、开放原始码的版本)可以说是JDK的原始人。

堆区的内存

  • 堆区也称堆空间,堆中是用于存储对象,通过"new"、内存块等
  • 堆溢出(内存溢出):指的是在创建对象执行时出现的泄露的内存积累的太多(受不了了),物理内存(一定的固定内存如:磁盘)不足,导致程序运行时要创建的对象是空的,没有给他赋值(对象中放东西)无处安放(不知道放哪里,没有明确的目标),通过不断的new新的对象(开辟了新的空间),而导致的堆中内存溢出的错误!

属性类:

package cn.aiweiyi.qingjing;

/**
 * @author 青衿
 * @Date 2020/11/9 18:37
 **/
public class Pag {
    Long i1;
    Long i2;
    Long i3;
    Long i4;
    Long i5;
    Long i6;
    Long i7;
    Long i8;
    Long i9;
    Long i10;
    Long i11;
    Long i12;
    Long i13;
    Long i14;
    Long i15;
    Long i16;
    Long i17;
}

测试类:

package cn.aiweiyi.qingjing;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // write your code here
        showPag();
    }


    static List<Pag> list = new ArrayList<Pag>();

    public static void showPag() {
        System.out.println("开始了开始了");
        for (int i = 0; i < 1000000000; i++) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Pag pag = new Pag();
            list.add(pag);
            pag = null;
        }
        System.out.println("结束了结束了");
    }
}

Eclipse开发工具中的报错显示:
在这里插入图片描述

IDEA开发工具中的报错显示:
在这里插入图片描述

栈区的内存

  • 栈区是用于存放函数的参数值、方法、局部变量等等
  • 栈溢出(内存溢出):指的是创建方法执行时出现的泄露的内存积累的太多(受不了了),物理内存(一定的固定内存如:磁盘)不足,导致程序运行时要创建的变量无处安放(不知道放哪里,没有明确的目标),而导致的内存溢出的错误!

测试类:

package cn.aiweiyi.qingjing;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void show() {
        Long i1;
        Long i2;
        Long i3;
        Long i4;
        Long i5;
        Long i6;
        Long i7;
        Long i8;
        Long i9;
        Long i10;
        Long i11;
        Long i12;
        Long i13;
        Long i14;
        Long i15;
        Long i16;
        Long i17;
        show();
    }

    public static void main(String[] args) {
        // write your code here
        show();
    }
}

在这里插入图片描述

调整方法区的内存

  • 通俗的说就是,因为直接内存,JVM将会在IO操作上具有更高的性能,因为他直接作用于本地系统的IO操作,而非直接内存,也就是堆内存中的数据,如果要作IO操作,会先复制到直接内存,再利用本地IO处理。
    在这里插入图片描述

总体的解决方案:

  1. 通过更改JVM内存参数:堆、栈、方法区大小
  2. 在这里插入图片描述

加上之后就可以解决了。希望大家能够减少避免JVM的错误!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值