gpt4 book ai didi

java - 如何避免 OutOfMemoryError 上传文件?

转载 作者:行者123 更新时间:2023-11-30 09:53:10 25 4
gpt4 key购买 nike

我正在尝试上传图像文件。当上传大小约为 40 到 200kb 的文件时,一切都很好。但是当我尝试上传一个大小为 459kb 的文件时,有时它会被上传,有时会显示 OutOfMemoryError。我不认为文件大小对于抛出此错误来说不是很大。我用的是树脂。是否有树脂设置可以防止上传大文件?因为在代码中我没有为文件上传设置任何最大大小。

任何人都知道如何避免这种情况。我希望用户上传不超过 10 MB 的任意大小的图像。

最佳答案

如果内存不足,首先要检查 JVM 分配了多少内存。您不会说 Resin 如何运行或它正在使用哪个 JVM 或操作系统/主机,但通常 JVM 将受默认堆大小和最大堆大小的约束。在命令行中,标准 JVM 具有控制这些值的 -Xms-Xmx 参数。当 JVM 启动时,它会分配默认堆并允许它增长到最大值。当分配超过最大堆时,它可能会尝试释放任何软/弱引用和其他一次性资源,强制 GC,但如果它仍然没有足够的空间,它将抛出 OutOfMemoryException。因此,更改值会影响何时发生这种情况。

要查找的第二件事是如何在服务器中分配内存。例如,如果您的服务器在内存中保存了一堆具有强引用的内容,您可能会耗尽内存,如果是这样,请考虑使用弱引用或类似 Ehcache 的内容。把东西移到磁盘上。或者,如果您的 servlet 由于某种计算错误而分配 MB 而不是 KB。无论如何,您不应该尝试将整个输入读入内存。假设您正在实现一个 servlet,那么提供的 ServletRequest/HttpServletRequest 允许您访问 POSTDATA 的输入流,并且您可以分块读取它(例如一次 32KB) ) 并将其以 block 的形式写入输出缓冲区。作为一般经验法则,以离散 block 读取输入数据无论如何都是更好的做法,因为您不希望不受信任的数据能够通过向您传递一些大文件来破坏您的服务器。

关于java - 如何避免 OutOfMemoryError 上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com