![]() |
1
3
它可能与你的伊甸园空间狭小有关。伊甸园空间是堆的一部分,在那里分配新对象,并一直保留,直到它们在GC中存活下来。 伊甸园的空间不大。(我没有默认值,但在1GB堆的默认设置中,它只有64MB) 您的文件可能会加载到伊甸园空间。要么没有200 MB的可用空间,要么字节数组被分配给小的,需要增长。在Java中,数组的唯一方法是分配一个新的更大的数组并执行一个内存拷贝。这将从100MB增长到200MB,显然需要300 MB的总EDEN堆空间。
你可以尝试设置
我不得不说,我不知道Tomcat在某种服务器模式下运行,它使用不同的GC/堆策略。
你可以用
您可能还需要签出: Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine 如果您解决了这个问题,您仍将面临性能低下的不可扩展解决方案。使用某种直接流媒体可能会更好。为此目的实现一个简单的servlet并不难。 |
![]() |
2
2
Java中的SOAP/XML总是有很多开销,需要大量内存。在这种特定的情况下,它试图在内存中分配一个(太大的)字节[],而不是直接将流写入另一种输出流(BytearrayOutputstream除外)。 您是否考虑过完全忘记SOAP接口的事情,然后使用java.net.urlconnection返回到基础知识并在此基础上进一步构建?通过这种方式,您可以使用fileoutputstream将inputstream直接写入磁盘,这比将整个内容存储在内存中更有效。 |
![]() |
3
0
看起来您正在内存中处理完整的文件,而不是在将其发送到客户机时读取它。 如果您创建一个解析为要发送的实际文件并将其保留在该文件中的URL,您是否可以将其分散到Web服务器? |