抛开堆的容量,有没有办法超越Java中的Integer.MAX_VALUE约束?
例如:
答案 0 :(得分:9)
如果你有一个巨大的收藏品,你将会遇到各种实际限制,然后才会有231 - 1个项目。一个拥有一百万件物品的藏品将会非常笨拙,更不用说超过千万件的物品了。
类似地,StringBuilder可以在达到MAX_VALUE
限制之前构建一个大小为2GB的String,这对于任何实际目的都是足够的。
如果你真的认为你可能达到这些限制,你的应用程序应该以不同的方式存储你的数据,可能是在数据库中。
答案 1 :(得分:3)
很长?适合我。
编辑: 啊,澄清问题。凉。我新的和改进的答案:
使用分页算法。
巧合的是,最近在另一个问题(Binary search in a sorted (memory-mapped ?) file in java)上,我掀起了一种分页算法来绕过java.nio中的 int 参数。 MappedByteBuffer API。
答案 2 :(得分:3)
您可以根据这些集合的源代码创建自己的具有long size()的集合。例如,要拥有更大的对象数组,您可以拥有一个数组数组(并将这些数组合在一起)
这种方法将允许几乎2 ^ 62个元素。
答案 3 :(得分:2)
数组索引受Integer.MAX_VALUE限制,而不是数组的物理大小。
因此,数组的最大大小与数组类型的大小相关联。
byte = 1 byte => max 2 Gb data
char = 2 byte => max 4 Gb data
int = 4 byte => max 8 Gb data
long = 8 byte => max 16 Gb data
字典是一个不同的故事,因为它们经常使用桶等技术或内部数据布局作为树。因此,这些“限制”通常不适用,或者您需要更多数据才能达到极限。
短:Integer.MAX_VALUE实际上不是限制因为你需要大量内存来实际达到极限。如果您达到此限制,您可能需要考虑改进算法和/或数据布局:)
答案 4 :(得分:1)
是的,使用BigInteger类。
答案 5 :(得分:1)
内存升级是必要的.. :))