亲爱StackOverflowers量有限的环境中,智能缓存与内存的Java
我在写这从一个二进制文件排序一个巨大的整数量的应用程序的过程。我需要尽快完成,主要的性能问题是磁盘访问时间,因为我做了大量的读取操作,它显着减慢了算法的速度。
这样做将是填补〜可用存储器的50%与某种类型的缓冲对象(的BufferedInputStream等),然后转移,从缓冲的对象的整数成整数的阵列(可能需要的标准方式剩余空余空间)并对数组中的整数进行排序。将已排序的块保存回磁盘,重复此过程,直到将整个文件拆分为已排序的块,然后将块合并在一起。 由于数据本质上是重复的(50%用于缓存,50%用于存储相同数据的数组),排序块的策略只利用50%的可用内存。
我希望我可以通过编写自己的缓冲类来优化算法(排序块)的这个阶段,该类允许将数据直接缓存到int数组中,以便数组可以占用所有的可用空间而不是只有它的50%,这会使这个阶段的磁盘访问次数减少2倍。事情是我不知道从哪里开始。
编辑: 本质上,我想找到一种方法来填充一个整数数组,通过只执行一个读取文件。另一个限制是数组必须使用大部分空闲内存。
如果任何我的发言是错误的,或者至少看起来是请大家指正,
任何帮助表示赞赏,
问候
你可以提供一些有关数据的信息。这些只是整数/只有正整数/是否有任何重复等,等等...... – peshkira
不幸的是,没有关于数据的信息可据我可以告诉文件可以包含任意整数任何 –
*“......可以包含任意整数任何” - 什么是整数的最大值,是比他们更大的' Integer.MAX_VALUE'?由于您立即将它们复制到另一个数据结构中,因此还有一个大于默认缓冲区的“InputStream”缓冲区并不会显示性能提升。配置文件具有不大于磁盘扇区大小的缓冲区,并将它们直接读入阵列。 –