我一直试图使用大于2gb的MediaHttpDownloader下载一个文件。下载了一段时间后,我的内存出现了错误。我认为这是由于mediaHttpDownloader试图将其写入Outputstream,因为输出流无法处理这么大的数据。
代码:
MediaHttpDownloader mediaHttpDownloader = new MediaHttpDownloader(HTTP_TRANSPORT, new HttpCredentialsAdapter(credentials));
mediaHttpDownloader.download(requestUrl, outputStream);错误:
Caused by: java.lang.OutOfMemoryError: null
at java.base/java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:125)
at java.base/java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:119)
at java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95)
at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156)会喜欢一些帮助/建议的最好的方式来处理一个非常大的文件下载。
谢谢
发布于 2022-09-22 09:10:09
每获得500 get的调用System.gc(),就从Runtime类获得空闲内存。你只需要在里面放一些代码就行了。此外,对于海量数据,需要在程序命令行中设置使用G1垃圾收集器的参数。https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html注意,使用URLConnection和HttpURLConnection,您可以为setDoInput设置系统并使用流。您还应该在堆和堆栈E.t.c的命令行中共享RAM方案的内存。检查是否在X32或X64中运行,因为x32有有限的内存堆栈分配的可分配堆是最大1mb。
https://stackoverflow.com/questions/73811502
复制相似问题