使用-XX:NewRatio参数控制旧区域的大小,如何在运行时确定其值? 提前谢谢!
更新 我没有足够的注意力,问题基本上是How to get vm arguments from inside of java application?的副本。我会删除它,但下面有一个有趣的讨论,所以我会在完成后稍后再做
答案 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。