java - 找出我可以在内存中创建的最大数组

标签 java memory runtime

我正在对文件中的多个整数进行排序,这些整数可能太大而无法一次性放入内存,我当前的想法是使用快速排序获得排序卡盘,然后将它们合并排序在一起。我想让 block 尽可能大,所以我想知道我可以一次性读入多少内容。

我知道 Runtime.FreeMemory,但我应该如何使用它。我应该仔细计算出我在程序中使用的其他变量,然后创建一个大小的数组(freeMemory-variablesSizes),还是很可能出错?

谢谢!

最佳答案

进行实验,直到找到效果良好的尺寸。可以在堆上分配的最大数组不一定是最快的方法。在许多情况下,整个堆不适合计算机 RAM,可能会被部分交换。仅仅因为您可以分配一个巨大的数组,并不意味着它将是优化速度的最佳大小。

一些自适应方法可能是最好的(根据数组大小测试每秒排序的项目数)并调整适合的内容而不会出现 OutOfMemoryError 错误。

更简单:坚持使用一些效果良好的大值,但不一定是您可以使用的最大值。

或者:使用外部库/数据库来做你想做的事 - 一般来说,处理大量数据很难正确处理,如果你不重新发明轮子,你可能会获得更好的性能和更短的开发时间.

关于java - 找出我可以在内存中创建的最大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7596773/

相关文章:

java - JCE 无法验证提供商 ABA

c - 请解释这个结果。 printf ("%c", 'abcd' )

java - 为什么JVM使用堆来存储对象和静态变量,使用栈来存储局部变量和函数调用?

runtime - 二叉搜索树的搜索时间

android - 在应用程序启动时立即隐藏状态和导航栏

java - 高效的排序数据结构,可以存储带有相应时间戳的原始消息

java - 重叠正则表达式第二部分

java - 我应该遵循什么顺序来关闭 bufferedwriter 和 filewriter?

c++ - 删除 std::vector 的元素(并更改大小)而不影响分配的内存

android - sqlite查询运行时错误