gpt4 book ai didi

java - JVM 是否会限制 IO 传输速率?

转载 作者:行者123 更新时间:2023-12-01 23:39:53 24 4
gpt4 key购买 nike

请问JVM对硬盘读写有影响吗?

我知道JVM可以控制为进程分配的堆内存。例如,在 shell 中我这样做是为了设置分配的堆内存:

java -Xms512M -Xmx1024M -jar my_java_program.jar

那么,是否可以设置硬盘(IO)写入/读取的最大或最小速度?

谢谢

编辑:

我已经编写了一个持续写入文本文件的java程序。我的程序具有以下架构:

public class Generator {
public static void main(String[] args) throws Exception {

// Variables initialization ...

// Loading in RAM some data to generate my text files

while(true){

// Writing the file
BufferedOutputStream buff = new BufferedOutputStream(new FileOutputStream(new File(temporaryFolderPath, fileName)), 51200000);
buff.write((some stuff ...).getBytes());
buff.flush();
buff.close();
}
}
}

我生成了该程序的可执行 JAR,并在具有 8 个 CPU 的虚拟机上执行它。我的目的是看看这个程序的写入速度,这就是为什么,我使用iostat命令来检查IO磁盘传输。

一个实例的结果:

wsec/s:约 8000

with wsec/s :每秒写入硬盘的扇区数(不知道扇区的大小)

2个实例的结果:

wsec/s:约 16000

3个实例的结果:

w秒/秒:32000

我的问题:

为什么当我多次执行 java 程序实例时,我的写作速度会更快?或者什么可以限制一个实例的写入速度?

最佳答案

不,每当您使用任何从磁盘读取/写入的 Java 库时,Java 基本上都是在要求操作系统尽可能快地传送数据。

如果您遇到 I/O 缓慢的问题,那么一个常见的问题是忘记在 Java 级别缓冲数据。例如,通常您应该避免直接使用 FileInputStream,而是在其周围包装 BufferedInputStream。缓冲区大小会影响读/写速度(例如 this graph of read time vs buffer size ),但一般来说默认缓冲区大小很好:您需要做的就是记住首先进行缓冲。

除此之外,为了给出更令人满意的答案,我们确实需要了解您在什么情况下拥有什么样的 I/O 性能。

关于java - JVM 是否会限制 IO 传输速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131043/

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