Приведенный ниже метод в моем приложении Java Spring направляет поток и загружает файл в корзину Amazon S3. Я исследовал, что использование потоков сделает загрузку больших файлов (> 100 МБ видео для моего случая использования) более эффективной с точки зрения памяти. При тестировании метода с файлом размером 25 МБ использование памяти моим приложением Java Spring в кластерной конфигурации Kubernetes увеличилось на 200 МБ! Я также попробовал файл размером 200 МБ, и память снова выросла до ~ 2 ГБ. Не было выброшено исключений из памяти, но использование памяти не уменьшается. Почему это происходит?
public void uploadFile(MultipartFile file, String saveFileName) {
try {
ObjectMetadata metadata = new ObjectMetadata();
if (file.getContentType() != null){
om.setContentType(file.getContentType());
}
metadata.setContentLength(file.getSize());
saveFileName = saveFileName.replaceAll(" ", "");
InputStream stream = file.getInputStream();
PutObjectRequest request = new PutObjectRequest(bucketName, saveFileName, stream, metadata);
request = request.withMetadata(om);
s3client.putObject(request);
stream.close();
} catch (AmazonClientException | IOException exception) {
// handle exception
}
}