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
。