Java:10gb数据库读入阵列列表意味着10gb的内存?

Java:10gb数据库读入阵列列表意味着10gb的内存?,java,database,memory,Java,Database,Memory,如果标题不清楚,很抱歉 如果我从数据库中读取10gb的数据到列表中,这是否意味着应用程序现在正在消耗10gb的内存?或者是否涉及某种类型的优化/压缩?事实上,如果您一次将10GB的数据读入任何程序,由于对象开销,将导致使用超过10GB的内存。根据经验,该放大系数约为2.4~3倍(即10GB=24~30GB内存被消耗) 处理大量内存时,处理一个小数据块并将其写入输出。这样,您就不会一次加载所有10GB,从而节省内存 如果您的10GB数据库需要响应提交给它的查询。仅在提交查询时获取数据,并使用缓存优

如果标题不清楚,很抱歉


如果我从数据库中读取10gb的数据到列表中,这是否意味着应用程序现在正在消耗10gb的内存?或者是否涉及某种类型的优化/压缩?

事实上,如果您一次将10GB的数据读入任何程序,由于对象开销,将导致使用超过10GB的内存。根据经验,该放大系数约为2.4~3倍(即10GB=24~30GB内存被消耗)

处理大量内存时,处理一个小数据块并将其写入输出。这样,您就不会一次加载所有10GB,从而节省内存


如果您的10GB数据库需要响应提交给它的查询。仅在提交查询时获取数据,并使用缓存优化数据库。设置最大结果集大小限制,以防止程序遇到OutOfMemory错误。

我明白了-谢谢。我曾希望情况正好相反。。我需要整个数据库来执行计算。因此,每次只有块的输出是无意义的。我是否需要更改我的计算以便能够以增量方式执行它们,还是有更好的方法?@Max您没有办法存储部分计算吗?例如,要对数据库中的特定字段求和,只需要在维护求和变量的同时一次加载一个条目(行)。当然,计算的复杂性可能远远超过简单的求和,但我相信总会有办法在任何给定时间只允许读取数据库的一个子集。也许你可以看看像redis这样的内存缓存。谢谢CPU Terminator。我认为短期的解决办法是建立它,看看我们如何去做。选择性查询可能是一个长期的解决方案。