2

对于 java.util 中的数组和容器,Java(可能还有底层的 C-ish 代码)的最大容量为 Integer.MAX_VALUE(约 20 亿)。是否有其他语言具有更大容量的容器?

4

9 回答 9

13

你不需要语言,你需要数据库

于 2008-12-22T23:25:57.003 回答
2

如果您开始达到与可以存储在列表/数组/集合中的元素数量相关的数字的 32 位限制,那么我会认真地开始寻找一种新的方法来实现您的算法。

您将有很多“我们需要这种专门的硬件来执行我们的程序”类型的要求。

于 2008-12-22T23:22:22.063 回答
2

C++ 中的 STL 容器使用 size_t 索引,它在 64 位机器上是 64 位的。

于 2008-12-22T23:28:57.900 回答
2

long您可以用两种支持索引的语言编写自己的容器。

于 2008-12-22T23:13:06.733 回答
1

你有一台机器有足够的内存来使用更多吗?O_o 如果你这样做,我会说你需要你自己的集合,因为内置的性能可能会扩展......

于 2008-12-22T23:14:07.883 回答
0

我通常使用数据库来存储大量数据。解决了很多缩放问题。

于 2008-12-22T23:20:40.647 回答
0

对象数据库可能更适合您的目的。

例如,db4o

或者,对于固定大小的对象数组,可能值得尝试使用内存映射文件,但为此您需要 OS API 的语言接口。

编辑:或仅在 ORM 上使用将您的集合映射到标准 SQL 数据库。这些存在于大多数语言中。例如,ruby 有 activerecord,Java 有 hibernate。

于 2008-12-22T23:29:20.770 回答
0

没有人愿意同时处理内存中如此大量的数据。我不知道您要做什么,但是如果您需要最大化居民数据量,您必须考虑:

  • 首先使用动态内存分配。
  • 如果可以选择,您可以尝试(在您的操作系统中)最大化用户模式虚拟内存寻址空间。例如,32 位 Windows 可以为用户模式/内核或 3GB/1GB 使用典型的 2GB/2GB 寻址空间。
  • 始终监视您的提交内存/操作系统提交限制,这样您就不会强迫操作系统崩溃,从而减慢整个系统的速度。
  • 您可以锁定最少量的内存以供您的应用程序独占使用。这因操作系统而异,但例如,您可以让用户为您的应用程序修复 256MB、512MB、1GB 内存空间。
  • 如果您需要超越可用的用户模式地址空间,您可以使用 64 位系统,或带有 PAE 等扩展的 32 位系统。

好吧,有很多东西要研究,但只有我的 2c。

于 2008-12-22T23:32:49.237 回答
0

如果您编写自己的容器,则没有限制。

于 2008-12-22T23:14:11.707 回答