gpt4 book ai didi

java - 当 Java 应用程序以 block 的形式读取巨大文件时减少内存占用

转载 作者:行者123 更新时间:2023-12-01 15:54:45 25 4
gpt4 key购买 nike

我正在创建一个应用程序来将数据上传到服务器。数据将相当巨大,高达 60-70GB。我正在使用 java,因为我需要它在任何浏览器中运行。

我的方法是这样的:

InputStream s = new FileInputStream(file);
byte[] chunk = new byte[20000000];
s.read(chunk);
s.close();
client.postToServer(chunk);

目前它使用大量内存,稳步攀升至约 1GB,当垃圾收集器命中时,它非常明显, block 之间有 5-6 秒的间隙。

有什么方法可以提高其性能并将内存占用保持在适当的水平吗?

编辑:

这不是我真正的代码。我还做了很多其他事情,例如计算 CRC、验证 InputStream.read 返回值等。

最佳答案

您需要考虑缓冲区重用,如下所示:

int size = 64*1024; // 64KiB
byte[] chunk = new byte[size];
int read = -1;
for( read = s.read(chunk); read != -1; read = s.read(chunk)) {
/*
* I do hope you have some API call like the thing below, or at least one with a wrapper object that
* exposes partially filled buffers. Because read might not be the size of the entire buffer if there
* are less than that amount of bytes available in the input stream until the end of the file...
*/
client.postToServer(chunk, 0, read);
}

关于java - 当 Java 应用程序以 block 的形式读取巨大文件时减少内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299335/

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