【问题标题】:"Java Heap Space" error when I'm trying to get the response from a webservice尝试从 Web 服务获取响应时出现“Java 堆空间”错误
【发布时间】:2014-08-04 20:52:03
【问题描述】:

Java 堆空间错误。 我想从网页中获取大字符串结果,请查看下面的示例。 但是

String response = resource.get(String.class);

将始终返回“java.lang.OutOfMemoryError: Java heap space”错误。问题是网页太大。我可以使用流式解决方案或其他解决方案来代替“字符串响应”吗?

谢谢。

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

public class helloWorldClient {
public helloWorldClient() {
    super();
}

public static void main(String[] args) {
    Client c = Client.create();
    WebResource resource = c.resource("http://localhost:7101/RESTfulService-Project1-context-root/jersey/helloWorld");
    String response = resource.get(String.class);
    }
}

【问题讨论】:

  • 响应有多大大? :>

标签: java web-services rest response


【解决方案1】:

当您尝试向内存中的堆空间区域添加更多数据时,会触发您面临的“java.lang.OutOfMemoryError: Java heap space”错误,但此数据的大小大于 JVM 可以容纳的大小Java 堆空间。

堆大小是在 JVM 初始化时设置的阈值。如果您不自己设置,则使用特定于平台的默认值。这是一个合理的安全网,可以防止例如泄漏过程,否则会导致整个机器瘫痪。

解决此问题的最简单方法是增加(或添加,如果缺少)以下参数设置您的 java 进程的最大堆大小,类似于以下允许 1GB 堆的示例:

java -Xmx1024m com.mycompany.MyClass

【讨论】:

    【解决方案2】:

    我在这个页面看到了下面这个例子https://jersey.java.net/documentation/1.18/client-api.html

    你可以试试这个:

    InputStream in = resource.get(InputStream.class);
    // Read from the stream
    in.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多