我假设您使用的是64位系统,因为32位系统不能寻址超过4 GiB的内存,这不足以满足您的目的。
Integer.MAX_VALUE为2 ^ 31-1,即约20亿。一个Integer对象使用24个字节的内存,一个具有20亿个元素的ArrayList必须在至少20亿长度的数组中存储对这些元素的引用;每个参考占用8个字节。
因此,您要使用的内存总量超过20亿乘以24字节,再加上20亿乘以8字节,即64 GiB。如果您有128 GiB的内存,并且出于某种原因决定让Java使用所有内存,那么从理论上讲这是可能的。
但是不要做。没有任何理由需要一个包含从0到Integer.MAX_VALUE的所有整数的ArrayList,除非可能要赢得一个赌注。如果您需要循环从0到Integer.MAX_VALUE的整数,请使用for
与您编写的循环相同的循环;他们不需要一次全部存储在内存中。
我假设您使用的是64位系统,因为32位系统不能寻址超过4 GiB的内存,这不足以满足您的目的。
Integer.MAX_VALUE为2 ^ 31-1,即约20亿。一个Integer对象使用24个字节的内存,一个具有20亿个元素的ArrayList必须在至少20亿长度的数组中存储对这些元素的引用;每个参考占用8个字节。
因此,您要使用的内存总量超过20亿乘以24字节,再加上20亿乘以8字节,即64 GiB。如果您有128 GiB的内存,并且出于某种原因决定让Java使用所有内存,那么从理论上讲这是可能的。
但是不要做。没有任何理由需要一个包含从0到Integer.MAX_VALUE的所有整数的ArrayList,除非可能要赢得一个赌注。如果您需要循环从0到Integer.MAX_VALUE的整数,请使用for
与您编写的循环相同的循环;他们不需要一次全部存储在内存中。