我有一个SSD磁盘,每个规格应提供不低于10k的IOPS。我的基准确认它可以给我20k IOPS。
然后我创建了这样一个测试:
private static final int sector = 4 * …
因为你正在使用 RandomAccessFile ,这是Java中最慢的磁盘I / O方法之一。
RandomAccessFile
尝试更快地使用某些东西,比如 BufferedInputStream 或者a BufferedOutputStream ,看看你得到了什么速度。
BufferedInputStream
BufferedOutputStream
如果你想知道为什么这会对SSD产生影响(因为SSD应该擅长随机访问),那不是关于访问的随机性;它是关于带宽的。如果你的SSD有一个1024位宽的总线,但你每次写入只写64位(就像你写的那样) long s或 double s),你的速度会变慢。 (当然,这些数字仅用于举例目的。)
long
double
现在,我可以看到,这不是你的代码正在做什么(或者至少,似乎正在做什么),但它很可能 RandomAccessFile 在引擎盖下实现它。再次尝试使用缓冲流,看看会发生什么。
RandomAccess在Java中大多快,但无法与C相比。 但是如果你想在JVM上更好地比较IO性能,请阅读Martin Thompson关于这个主题的优秀博客: http://mechanical-sympathy.blogspot.co.uk/2011/12/java-sequential-io-performance.html