new byte[]数组的时候发生NegativeArraySizeException异常

在写一个测试demo排查堆内存问题时,发现当输入1*3000的时候会发生NegativeArraySizeException异常,这个异常是说创建数组的时候,给了一个负数的容量大小。
在这里插入图片描述

String[] s = input.split("\\*");
try {
	final int count = Integer.parseInt(s[0]);
	final int sizeM = Integer.parseInt(s[1]);
	for (int i = 0; i < count; i++) {
		// 1024 * 1024 * sizeM   当sizeM为3000的时候发现报错
	    list.add(new byte[1024 * 1024 * sizeM]);
    }
} catch (Exception e) {
	// 处理输入,这里只是简单地打印出来
	log.error("你输入的是:{},异常:{}", input, e.getMessage(), e);
}

新建数组的代码是new byte[1024 * 1024 * sizeM],之所以报错是因为三个数相乘超过了int类型的最大值,导致变成了负数。Java创建数组的时候,容量只能使用int类型,所以只能减少单个数组的容量大小了,sizeM值最大只能是2047
在这里插入图片描述
在这里插入图片描述

posted @ 2024-12-24 09:43  西瓜当冬瓜  阅读(3)  评论(0)    收藏  举报  来源