在写测试方法的时候,生成了一个数组,之后报了堆溢出错误,这样的报错一般来说只要有一些JVM的基础都知道要用—Xmx、-Xms来开更大的堆,接下来看看我碰到的一个堆溢出的问题

在测试代码中开了一个50000*50000的int数组报错:

@Test
public void creatMPEM() {
double packetLoss = 0.5;
int[][] test = NetworkCodeTool.creatMPEM(50000, 50000, packetLoss);
int one = 0;
int zero = 0;
double packageLossReal = 0;
for (int i = 0; i < test.length; i++) {
for (int j = 0; j < test[0].length; j++) {
int temp = test[i][j] == 1 ? one++ : zero++;
// System.out.print(test[i][j]+" ");
}
// System.out.println();
} Double sum = new Double(one + zero);
packageLossReal = one / sum;
System.out.println("期望丢包率:"+packetLoss);
System.out.println("实际丢包率:"+packageLossReal);
} public static int[][] creatMPEM(int n, int m, double packetLoss) {
if (packetLoss >= 1){ throw new RuntimeException("the packetLoss is no means");}
int[][] matrix = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
matrix[i][j] = Math.random() < packetLoss ? 1 : 0;
}
}
return matrix;
}

报错信息:

java.lang.OutOfMemoryError: Java heap space

	at com.axin.communication.tools.compute.NetworkCodeTool.creatMPEM(NetworkCodeTool.java:20)
at com.axin.communication.tools.compute.NetworkCodeToolTest.creatMPEM(NetworkCodeToolTest.java:9)

当你搜网上的解决方法时,往往就会看到说在虚拟机参数列上打上-Xms1024M,-Xmx1024M等等分配一个更大的堆空间,然而对上述的代码来说仍然会报错

其实我们遇到问题时下意识的动作就是去网上搜问题,往往没有有意识思考

实际上只要博主静下心来真正的算一算50000*50000 int数组的大小就会发现问题的所在。

计算一下50000*50000数组所占的空间:1一个int类型的数占4个字节,总共占50000*50000*4 = 10000000000 Byte ~=10G

到这我们就会发现一个不起眼的数组竟然占了这么大的空间,所以之前开的1G的堆根本是杯水车薪。如果屏幕前的你也遇到了这个问题,不妨计算一下你开的数组占了多少的空间。

Java的数组堆溢出问题的更多相关文章

  1. 实战Java虚拟机之一“堆溢出处理”

    从今天开始,我会发5个关于java虚拟机的小系列: 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之四 ...

  2. Java虚拟机六 堆溢出的处理

    在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM. Exception in thread "main" java.lang.Out ...

  3. java代码实现JVM栈溢出,堆溢出

    参考博客:http://www.cnblogs.com/tv151579/p/3647238.html 背景知识: 栈存放什么:栈存储运行时声明的变量——对象引用(或基础类型, primitive)内 ...

  4. 【java虚拟机】内存溢出与内存泄漏

    作者:平凡希 原文地址:https://www.cnblogs.com/xiaoxi/p/7354857.html 一.基本概念 内存溢出:简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提 ...

  5. 写Java代码分别使堆溢出,栈溢出

    首先要搞清楚堆栈里放的什么东西: 栈存储运行时声明的变量——对象引用(或基础类型, primitive)内存空间,堆分配每一个对象内容(实例)内存空间. 一个变量可以先后指向多个对象实例:数组.链表等 ...

  6. 实战Java虚拟机之中的一个“堆溢出处理”

    从今天開始.我会发5个关于java虚拟机的小系列: 实战Java虚拟机之中的一个"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之 ...

  7. Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)

    转载自https://github.com/pzxwhc/MineKnowContainer/issues/25 包括:1. 栈溢出(StackOverflowError)2. 堆溢出(OutOfMe ...

  8. java内存溢出示例(堆溢出、栈溢出)

    堆溢出: /** * @author LXA * 堆溢出 */ public class Heap { public static void main(String[] args) { ArrayLi ...

  9. 使用jvisualvm.exe工具查看java项目内存溢出(堆溢出)

    在查看内存溢出的时候,我们需要明白,堆溢出和持久代溢出,他们不一样,说到内存泄漏,我们就需要明白,内存中  年老代和新生代,和持久代,这3块的数据 自己的理解: new了一个对象,会进入到堆里面,先放 ...

随机推荐

  1. Netty 核心组件 EventLoop 源码解析

    前言 在前文 Netty 启动过程源码分析 (本文超长慎读)(基于4.1.23) 中,我们分析了整个服务器端的启动过程.在那篇文章中,我们重点关注了启动过程,而在启动过程中对核心组件并没有进行详细介绍 ...

  2. WPF ContextMenu的使用

    <Grid.ContextMenu > <ContextMenu> <MenuItem Header="增加" Click="MenuIte ...

  3. FORM中使用onSubmit="return false"防止表单自动提交,以及submit和button提交表单的区别

    在页面中有多个input type="text"的文本输入框的情况下没有问题,但是当页面中有只有一个文本框的情况下(),就会出现此问题. 后来在form 中添加:onsubmit= ...

  4. Code Signal_练习题_evenDigitsOnly

    Check if all digits of the given integer are even. Example For n = 248622, the output should beevenD ...

  5. java post请求的表单提交和json提交简单小结

    在java实现http请求时有分为多种参数的传递方式,以下给出通过form表单提交和json提交的参数传递方式: public String POST_FORM(String url, Map< ...

  6. my big day is coming!

    明天博士学位论文答辩,给自己加油! 期望一切顺利!

  7. Selenium win7+selenium2.0+python+JetBrains PyCharm环境搭建

    win7+selenium2.0+python+JetBrains PyCharm环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是py ...

  8. Express使用Https服务器

    var fs = require('fs'); var http = require('http'); var https = require('https'); var privateKey = f ...

  9. mybatis-generator 详细配置及使用,爬坑记录

    mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...

  10. 快速配置webpack 4.x

    区分开发模式和生产模式: npm run start——开发模式,启用devServer,文件的改动实时更新.刷新 npm run build——生产模式,打包文件到dist文件夹 // packag ...