Commons FileUpload 1.2.1を使用して大きな(> 300MB)ファイルをサーブレットにアップロードすると、OutOfMemoryErrorsが発生します。DiskFileItemを使用する目的は、(おそらく大きな)ファイルがメモリに存在しないようにすることであるため、奇妙に思えます。デフォルトのサイズしきい値である10KBを使用しているので、ヒープにロードする必要があるのはそれだけですよね?部分的なスタックトレースは次のとおりです。
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)
なぜこうなった?不足している構成はありますか?ヒープサイズを増やす以外に、この状況を回避するためのヒント/コツはありますか?
理論的には、この操作からメモリにロードする必要があるのは10KBを少し超えるため、ヒープを増やす必要はありません。さらに、私のヒープ最大値(-Xmx)はすでに1GBに設定されており、十分なはずです。