有没有办法在运行时确定堆的旧区域的大小

时间:2013-07-13 17:58:42

标签: java

使用-XX:NewRatio参数控制旧区域的大小,如何在运行时确定其值? 提前谢谢!

更新 我没有足够的注意力,问题基本上是How to get vm arguments from inside of java application?的副本。我会删除它,但下面有一个有趣的讨论,所以我会在完成后稍后再做

1 个答案:

答案 0 :(得分:1)

好的,所以,如果我理解正确的话,你有一个非常大文件,几个GB大,整个整数,这些整数存储在big endian中。

我的建议如下:在这么大的文件上创建一个实现List<Integer>的类,然后使用Collections.sort()

那是:

  • 您将需要排序的文件作为参数;
  • 您将该文件映射到内存中;
  • 实施List界面;
  • 你让Collections.sort()完成这项工作。

完成Collections.sort()后,您只需.force()获得MappedByteBuffer的频道。如果没有I / O错误,你可以去,替换原始文件。

是的,这是相当多的工作,但它是可行的。根据需要演示代码。

注意:FileChannel.map()有限;您可能必须创建多个映射。我建议拆分为1 GB映射。诚然,这将使.subList()的实施变得非常复杂。此外,请注意,您最多只能处理Integer.MAX_VALUE个整数;这意味着您的文件不能大于((1 << 31 - 1) << 2)。 1&lt;&lt; 33是8 GB。