2012-03-10 2 views
1

Я пытаюсь вызвать веб-сервис, ответ содержит большую строку, вылезая из выпуска памяти кодаВыбравшись из памяти ошибки при чтении товара из веба-службы

URL u = new URL(SharedVariables.server); 
      URLConnection uc = u.openConnection(); 
      HttpURLConnection connection = (HttpURLConnection) uc; 
      connection.setConnectTimeout(SharedVariables.connectionTimedOutValue); 
      connection.setDoOutput(true); 
      connection.setDoInput(true); 
      connection.setRequestProperty("SOAPAction", SOAP_ACTION); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-type", "text/xml; charset=utf-8"); 

      String xmldata = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
          "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> "+ 
          "<soap:Body>"+ 
          "<GetCaseCriminalTicketLinks xmlns=\"http://tempuri.org/\">"+ 
          Req.getRequestXml()+        
          "</GetCaseCriminalTicketLinks>"+ 
          "</soap:Body>"+ 
          "</soap:Envelope>";   

      OutputStream out = connection.getOutputStream(); 
       Writer wout = new OutputStreamWriter(out); 
       wout.write(xmldata); 
       wout.flush();     
       out.flush();      


       BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()),8 * 1024); 

       String result;  

       while ((result=rd.readLine()) != null) { 


       int length = result.length();    
       String temp = result.substring(316, (length - 100));   

       JSONObject tempJson = new JSONObject(temp);} 

Бревно

Caused by: java.lang.OutOfMemoryError 
at java.lang.String.<init>(String.java:513) 
at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:650) 
at java.lang.StringBuilder.toString(StringBuilder.java:664) 
at java.io.BufferedReader.readLine(BufferedReader.java:398) 

эта линия вызывает

while ((result=rd.readLine()) != null) 

Любые предложения?

Благодаря

+0

Как долго линия вы пытаетесь читать? – aioobe

+0

будет около 1 мб – Kishore

ответ

0

Для всех переменных, доступных в цикле while ((result=rd.readLine()) != null), память будет создана на Heap, как вы упомянули вы пытаетесь поток aroung 1 Мб данных, цикл будет exceute долго так obivously куча перегружен для хранения данных.

Мои предложения:

  1. Попробуйте потоковую минимальный объем данных и проверить
  2. избежать необходимости Instantiation объектов внутри цикла, используйте ссылки вместо.
  3. Найти способ увеличить размер памяти виртуальной машины Java

Ссылки для рассмотрения являются:

Increase heap size in java

JVM-Java increase heap size

Смежные вопросы