목차

1. 개요

JDK 21를 사용할 경우, MultipartFile.getBytes() 메서드 호출시 아래 사진과 같이 Direct Buffer Memory가 부족하여 Out of Memory Error가 발생하는 경우가 있습니다.

다만, 동일한 소스코드로 JDK 17을 사용할 경우에는 발생하지 않습니다.

따라서 두 JDK 버전 간의 Direct Buffer Memory 사용량을 비교하는 글 입니다.

20.9MB 중 17.7MB가 할당되어 있는 상태임. 따라서 17.6MB를 더 할당할 수 없다는 내용

20.9MB 중 17.7MB가 할당되어 있는 상태임. 따라서 17.6MB를 더 할당할 수 없다는 내용

2. 프로젝트 세팅

2-1. 주요 코드 작성

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;
}