【发布时间】:2023-03-03 02:30:01
【问题描述】:
我正在使用 Spring 和 Hibernate 并尝试上传大文件,但是当我尝试上传时 超过 150 Mb 然后它会产生类似的错误
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:755)
... 157 more
我使用的是 Windows 64 位操作系统。经过大量谷歌搜索后,我发现这是 JDK 中可用的错误。 谁能帮我解决这个问题?
有人写过这个问题https://github.com/MLCL/Byblo/issues/78。但我不确定这是否是错误。如果有错误,那么我该如何解决。任何其他合适的解决方案。
【问题讨论】:
-
您能发布执行此操作的代码吗?除非我们看到代码实际上试图做什么,否则我们无能为力。谢谢
-
其实代码不是我写的。我正在使用带有spring和hibernate的liferay。在它里面我正在使用它上传文件文档和媒体 Portlets。
-
无论您使用什么库,都非常不明智地使用内存映射文件来保存上传文件,并且无论出于何种原因,操作系统都不会对超过一定大小的文件进行内存映射.在这种情况下,不需要内存映射 I/O。向图书馆供应商投诉,然后再找一家。
-
我同意 EJP。如果您查看 FileChannelImpl.map0(..) 源代码:hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/726e38af4020/src/…,您将看到 JNU_ThrowOutOfMemoryError(env, "Map failed") 是否仅在文件太大的情况下才会发生。看看这个:stackoverflow.com/questions/19016512/c-mapviewoffile-fails
-
@ EJP:是的,我得到了你的建议,但现在我的项目结束了,我无法更改我的 liferay CMS。有没有其他方法可以执行此任务。并且想说这仅在我的平台上执行,而不是在所有平台上执行。这不是与 liferay 相关的错误。但是我的 java evn 配置有问题。我尝试在 antoher liferay 中上传相同的文件,没有错误。