简体   繁体   English

android内存不足错误

[英]android out of memory error

I'm calling RESTFUL API. 我正在调用RESTFUL API。 I'm using spring libraries. 我正在使用spring库。 But I'm getting this OutOfMemoryError when restTemplate.exchange is executed. 但是执行restTemplate.exchange时出现了OutOfMemoryError错误。 Below is my code snippet and error log. 以下是我的代码段和错误日志。 I'm using this code to get data from the server using webservices. 我正在使用此代码使用Web服务从服务器获取数据。 On some devices this works fine but few devices throws exception. 在某些设备上,这可以正常工作,但很少有设备会引发异常。

    FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
        formHttpMessageConverter.setCharset(Charset.forName("UTF8"));
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
        restTemplate.getMessageConverters().add(formHttpMessageConverter);
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
        DeviceInfo deviceInfo = new DeviceInfo(mContext);

        map.add("organizationId", "0");
        map.add("groupCode", securityCode);
        map.add("deviceId", deviceInfo.getDeviceID());
        map.add("version_code", deviceInfo.getVersionCode() + "");
        map.add("freshDataLoad", mode);
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(map, headers);
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
        String respStr = responseEntity.getBody();

following is the error log 以下是错误日志

java.lang.OutOfMemoryError
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124)
at java.lang.StringBuffer.append(StringBuffer.java:278)
at java.io.StringWriter.write(StringWriter.java:123)
at org.springframework.util.FileCopyUtils.copy(FileCopyUtils.java:189)
at org.springframework.util.FileCopyUtils.copyToString(FileCopyUtils.java:240)
at org.springframework.http.converter.StringHttpMessageConverter.readInternal(StringHttpMessageConverter.java:107)
at org.springframework.http.converter.StringHttpMessageConverter.readInternal(StringHttpMessageConverter.java:44)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:147)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:98)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:743)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:728)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:549)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:504)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:452)
at com.example.testapp.sync.SyncStrategy.getTestData(SyncStrategy.java:
at com.example.testapp.sync.SyncWorker$2.run(SyncWorker.java:126)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)

This may happens as your application consumes a lot of memory. 这可能是因为您的应用程序占用了大量内存。 Try to optimize your application code. 尝试优化您的应用程序代码。

Also, a trick may helps you : try to call garbage collector explicitly before handle this request, which requires a lot of memory. 另外,一个技巧可能会帮助您:在处理此请求之前尝试显式调用垃圾收集器,这需要大量内存。

Call: Runtime.getRuntime().gc(); 调用:Runtime.getRuntime()。gc(); to invoke garbage collector. 调用垃圾收集器。

Refer to link: How to resolve out of memory issue 请参阅链接: 如何解决内存不足问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM