Я получаю OutOfMemoryErrors при загрузке больших (> 300 МБ) файлов в сервлет с использованием Commons FileUpload 1.2.1. Это кажется странным, потому что весь смысл использования DiskFileItem состоит в том, чтобы предотвратить размещение (возможно, большого) файла в памяти. Я использую порог размера по умолчанию 10 КБ, так что это все, что нужно загрузить в кучу, верно? Вот частичная трассировка стека:
java.lang.OutOfMemoryError
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:177)
at org.apache.commons.fileupload.disk.DiskFileItem.get(DiskFileItem.java:334)
at org.springframework.web.multipart.commons.CommonsMultipartFile.getBytes(CommonsMultipartFile.java:114)
Почему это происходит? Есть ли какая-то конфигурация, которую мне не хватает? Любые советы/рекомендации, чтобы избежать этой ситуации, помимо увеличения размера кучи?
Я действительно не должен увеличивать свою кучу, потому что теоретически максимум, что должно быть загружено в память от этой операции, составляет чуть более 10 КБ. Кроме того, мой максимальный размер кучи (-Xmx) уже установлен на 1 ГБ, чего должно быть достаточно.