Java 传递大字符串时发生OutOfMemoryError
我的web应用程序在客户端传递从剪贴板图像获取的base64字符串时遇到OutOfMemory错误 当将大字符串作为参数传递给另一个方法时,就会发生此问题 使用GWT传递大型base64字符串时的解决方法是什么 当大字符串作为参数传递给其他方法时,就会出现问题 不,不是 将字符串作为参数传递不会导致Java 传递大字符串时发生OutOfMemoryError,java,gwt,Java,Gwt,我的web应用程序在客户端传递从剪贴板图像获取的base64字符串时遇到OutOfMemory错误 当将大字符串作为参数传递给另一个方法时,就会发生此问题 使用GWT传递大型base64字符串时的解决方法是什么 当大字符串作为参数传递给其他方法时,就会出现问题 不,不是 将字符串作为参数传递不会导致OutOfMemoryError 您看到的OOME要么是由创建字符串对象引起的,要么是对字符串对象执行某些操作导致创建新对象。它不是由传递字符串引起的,不管字符串有多大 如果您需要关于如何处理它的建
OutOfMemoryError
您看到的OOME要么是由创建字符串
对象引起的,要么是对字符串
对象执行某些操作导致创建新对象。它不是由传递字符串引起的,不管字符串有多大
如果您需要关于如何处理它的建议,您需要向我们展示创建字符串的代码和使用它的代码。但是处理过大数据块的一般方法是以一种避免同时在内存中表示所有数据的方式处理数据。可能是GWT Jetty插件for Eclipse的问题如果您使用GWT开发模式,请尝试使用以下方法禁用开发模式:
http://127.0.0.1:8888/index.html
而不是
http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997
如果工作正常,如果增加JVM堆空间,可以继续使用开发模式,例如:
-XX:PermSize=128m -XX:MaxPermSize=256m -Xmx1224m
这必须是开发模式的问题,因为传递字符串很难导致OutOfMemory错误。可能只是内存不足。您为运行web服务器的JVM(以及您使用的服务器)提供了多少内存?。或者您可能在某个地方遇到了错误。请尝试使用解析。Java应该只传递对该对象的引用,因此应该只有一个实例和几个4或8字节的引用。内存不足的原因一定是在其他地方,或者您的措辞不正确。内存使用:您应该使用JSF,将状态保持在客户端,并将限制设置得更低,这会有所帮助。您使用的是哪台服务器??tomcat???-1字符串是用Java编写的,它不仅仅是一个原语,也不仅仅是一个对象。它的参数化类似于一个“值”(需要额外内存),但它的初始化类似于一个“引用”(不需要额外内存)。@PeterRader-要么你对问题的理解不正确,要么你误读了我的答案。当您将字符串对象作为参数传递时,实际上是在传递一个4或8字节的引用。并且该引用正在堆栈上传递。将任何类型的对象作为参数传递不会导致堆分配,因此不会产生OOME。我可以使用大字符串作为参数来复制OOME。在我的例子中,递归遵循的循环更少,只包含一个大字符串!严重的是,我对参数没有做更多的处理。jdk1.7.0_10.OOME不是由传递字符串引起的。我要求您向我展示该代码。我将使用java chat:)即使字符串大小约为360KB?尝试一下,但是,您应该尝试另一种方法来处理该数据,因为它太大,无法在内存中保存性能。这正是我的问题,如何从剪贴板处理base64图像