JDK 21를 사용할 경우, MultipartFile.getBytes()
메서드 호출시 아래 사진과 같이
Direct Buffer Memory가 부족하여 Out of Memory Error
가 발생하는 경우가 있습니다.
다만, 동일한 소스코드로 JDK 17을 사용할 경우에는 발생하지 않습니다.
따라서 두 JDK 버전 간의 Direct Buffer Memory 사용량을 비교하는 글 입니다.
20.9MB 중 17.7MB가 할당되어 있는 상태임. 따라서 17.6MB를 더 할당할 수 없다는 내용
MultipartFile.getBytes()
를 호출하는 로직 작성public File convertToFile(final MultipartFile multipartFile) {
final File convertedFile = new File(Objects.requireNonNull(multipartFile.getOriginalFilename()));
try (OutputStream os = new FileOutputStream(convertedFile)) {
os.write(multipartFile.getBytes());
} catch (IOException e) {
log.error("fail to transform multipart to bytes", e);
}
return convertedFile;
}