我正在实现一个包含大约2,000,000(2百万)个数组的程序,每个数组的大小为16,512(128 x 129)。我可能只需要一次调用200个数组(即3.3 MB),但我想知道我是否可以将程序扩展到超过2百万(比如2亿),但我仍然只需要一次调用200个数组。那么,当我一次不使用200多个阵列时,制作越来越多阵列的限制是什么?
如果需要,我可以提供更多信息,提前谢谢
答案 0 :(得分:3)
我非常怀疑,除非你在拥有大量内存和非常慷慨堆的64位机器上运行。
让我们计算您的数据所需的内存:
2,000,000*128*129*8/1024/1024/1024 = 30.8GB.
您需要为JVM,程序的其余部分和操作系统添加额外的RAM。
对我来说听起来像是一个设计不佳的解决方案。
如果您的意思是“我一次只能在内存中安装200个阵列”,您当然可以这样做,但您必须将其余部分移至辅助存储或关系数据库。查询它们,使用它们,GC它们。它可能不是最好的解决方案,但很难根据您发布的内容来判断。
更新
“触发”是否意味着“数据库触发”?
是的,您可以将它们存储在磁盘上。我无法保证它会表现出色。你的硬盘肯定可以处理30GB的数据;如果足够大,它可以容纳300GB。
请记住,你必须考虑如何管理RAM。 GC捶打可能是一个问题。一个好的缓存解决方案可能是你的朋友。不要自己写一个。
如果硬盘驱动器发生故障而您丢失了所有数据,会发生什么?你备份了吗?如果磁盘发生故障,您的应用程序是否可以关闭?想想那些场景。祝你好运。
答案 1 :(得分:0)
只要您不再保留对不再需要的阵列的引用,就没有硬性限制。旧数组将自动收集垃圾,因此您可以无限制地继续分配和放弃数组。
当然,在任何给定时间都可以保留多少个阵列。这受到JVM可用内存量的限制。
答案 2 :(得分:0)
只要你增加最大堆大小以确保你的应用程序没有内存不足,你就可以了。