【问题标题】:Storing enormously large arrays存储非常大的数组
【发布时间】:2014-06-11 15:19:32
【问题描述】:

我有问题。我在 Java、Eclipse 中工作。我的程序计算了一些数学物理,我需要绘制过程的动画(Java SWT 包)(一些流体动力学)。问题是二维的,因此每次迭代都会返回二维数字数组。一次迭代需要相当长的时间,并且从一次迭代到另一次迭代的迭代变化需要时间,因此在程序运行时动态显示图片似乎是个坏主意。在这种情况下,我的想法是存储一个三维数组,其中第三个索引代表时间,并在计算结束时构建动画。但在这种情况下,由于我希望程序准确,我需要大量迭代,因此程序很容易达到最大数组大小。所以问题是:如何避免创建如此庞大的数组或如何避免数组大小的限制?我想过创建一个特殊的文件来存储数据,然后从中读取,但我不确定这一点。你有什么想法吗?

【问题讨论】:

  • 你有多少内存?我敢打赌,在遇到数组大小限制之前,您会用完内存。您可以尝试分布式解决方案,例如 memcached/redis,但您必须尝试提出比数组更聪明的数据结构。
  • @instop: 试一试,如果有效,那么可以,否则再来一次。至少尝试一下。
  • 我不建议向您的数组添加维度。虽然它们更易于阅读,但它们从数据中抽象出来;每个抽象都会花费性能。如果您可以选择使用原始二进制数据,并尽一切可能只加载您需要的内容。运行几次迭代并将几个“帧”时间存储在一个文件中,然后用一个新文件重复。要显示,请加载第一个现有文件并按顺序显示它们,直到用完要显示的完整文件。
  • 本质上,应用分而治之的概念。
  • 感谢回复,我试试。

标签: java arrays overflow physics modeling


【解决方案1】:

当我在大学为我的论文研究程序架构生成系统时,我为计算数据创建了小型、极易读取和解析的二进制文件。这意味着数据可以在可接受的时间内读入,尽管数据量很大......

我建议对您的动画执行相同的操作...每个文件存储大约 5 秒的动画然后在需要时缓存每个文件可能很有价值...

此外,您的数组有多大,如果不是最大数组大小,而是您达到的最大内存限制,您可以增加 JVM 能够分配的内存量。

我希望这会有所帮助,而不仅仅是我的胡言乱语......

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多