62,614
社区成员
发帖
与我相关
我的任务
分享
new Random()
.ints()
.limit(Integer.MAX_VALUE)
.sorted()
.sum();
new Random()
.ints()
.limit(Integer.MAX_VALUE - 9)
.sorted()
.sum();
/**
* The maximum size of an array that can be allocated.
*/
static final long MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
第二个,虽然通过了第一个校验,但限于IntStream内部是以数组保存元素,且数组是以2的幂等方式扩大;因为Integer.MAX_VALUE-9对2取对数为31,会导致IntStream尝试计算1 << 31造成整数循环溢出;这里最大的合理值为Integer.MAX_VALUE / 2 + 1
但实际上,这个值通常也是过不去的,因为一般jvm开不出这么大内存。2^31byte=2GB,大于jvm的默认设置。