gpt4 book ai didi

java - 我该如何修复: OutOfMemoryError with External Sorting

转载 作者:行者123 更新时间:2023-12-02 07:03:13 26 4
gpt4 key购买 nike

该程序基本上从名为 data.bin 的二进制文件中读取大量数据,其中文件中的每个项目的长度为 1024 字节。每个项目的前 24 个字节是 key ,其余 1000 个字节只是随机信息。它将所有这些项目添加到名为“items”的数组列表中,然后可以使用合并排序算法对其进行排序。

但是在添加大约 227475 个项目后,我在用 ERROR 注释的行上收到 OutOfMemoryError 。这一切都应该是外部排序的,但它显然不能正常工作。那么我怎样才能将大量的项目分成较小的集合进行排序然后合并呢?

  public static void main(String[] args) 
{
System.out.println("Welcome to external merge sorter.");
ArrayList<Entry<BigInteger, BigInteger>> items = new ArrayList<Entry<BigInteger, BigInteger>> ();
TEntry<BigInteger, BigInteger> en = null;
try {
RandomAccessFile data = new RandomAccessFile("data.bin","rws");
System.out.println("Found file data.bin.");
long length = data.length();
long recs = length / 1024;
long count = 0;
byte []b = new byte[1024];
System.out.println("Sorting...");
while(count < recs)
{
count++;
data.readFully(b);
byte []key = Arrays.copyOfRange(b, 0, 24);
byte []value = Arrays.copyOfRange(b, 24, 1024);
System.out.println(count);
//ERROR
en = new TEntry<BigInteger, BigInteger>(new BigInteger(key), new BigInteger(value));
items.add(en);
}
}
catch (Exception e) {
e.printStackTrace();
}
ItemCompare compare = new ItemCompare();
MergeSort sorter = new MergeSort();
sorter.sort(items, compare);
System.out.println("Done!");
}

最佳答案

因此,这可能不适合您的情况,或者您可能不想使用其他代码。但是,有几个很好的第三方库可以进行外部排序。这是我以前用过的,http://code.google.com/p/externalsortinginjava/ 。我发现它速度快且内存效率高。

这是一些示例代码使用

File f = new File("/file/to/sort");
Comparator<String> comparator = new Comparator<String>() {
public int compare(String r1, String r2){
return r1.compareTo(r2);}};
int maxNumberTempFiles = 1000;
Charset cs = Charset.defaultCharset();
boolean distinctValues = true;
List<File> l = ExternalSort.sortInBatch(f, comparator, maxNumberTempFiles,cs,null,distinctValues) ;
File sf = new File("sortedfile."+r.nextInt()+".tmp");
ExternalSort.mergeSortedFiles(l, sf, comparator,cs, true);

关于java - 我该如何修复: OutOfMemoryError with External Sorting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com