J2me - HTTP请求中的OutofMemory

时间:2016-12-09 09:18:46

标签: java http memory java-me

我在j2me项目中有一个方法,在正常工作2天后,它会崩溃。出现的错误如下:

Contacting website...
java.lang.OutOfMemoryError
   (stack trace incomplete)

所述方法是用于与网站通信的方法。它接收一个字符串和一个模式选择器(i = 1或smth else)并继续处理该请求。这是代码:

 void enviarPost(int i, String comando)throws IOException, IllegalStateException, IllegalArgumentException, ATCommandFailedException{     
      System.out.println("Contacting website...");
        if(i == 1)
            {
            url = "http://websitedummy.com.pl/index.php?IMEI=" + imeiX + "&IP=" + ipX;
            }
            //53543D303B44723D4E616F
            else
            {
            url2 = comando;             
            url = "http://websitedummy.com.pl/index.php?data={\"IMEI\":\""+imeiX+"\",\"TS\":\"20/04/13-08:31:44\",\"SER\":\""+url2+"\"}";                

            }



            try {
                Thread.sleep(1000);
                connection = (HttpConnection) Connector.open(url);
                Thread.sleep(500);
                connection.setRequestMethod(HttpConnection.GET);
                Thread.sleep(500);
              connection.setRequestProperty("Content-Type", "text/plain");

                Thread.sleep(500);
                int con = 0;
                try{
                 con = connection.getResponseCode();
                } catch (Exception e4)
                { 
                    System.out.println(e4);

                }                   
                if (con == HttpConnection.HTTP_OK) {
                    System.out.println("Vamos");
                    inputstream_ = connection.openInputStream();
                    int ch;
                    while ((ch = inputstream_.read()) != -1 ) {
                        dataReceived.append((char) ch);

                    }

                    System.out.println("Atualizado.");

                    acabouatualizar=1;

                    inputstream_.close();
                    connection.close();
                } else {
                    System.out.println("Error");
                    // Connection not ok
                }
            } catch (Exception e) {
              System.out.println("EXCEÇÂO 1 - " + e);

            } finally {
                if (inputstream_ != null) {
                    try {

                        inputstream_.close();

                    } catch (Exception e1) {
                        System.out.println("EXCEÇÂO 2- " + e1);
                    }
                }
                if (connection == null) {
                    try {
                        System.out.println("Fechou conexao.");
                        connection.close();

                    } catch (Exception e2) {
                        System.out.println("EXCEÇÂO 3- " + e2);
                    }
                }
            }
            }

为了解决这个问题,我考虑清除连接中使用的所有变量。问题是我必须几乎确定问题是什么,因为错误需要2天才会发生,这将花费我很多时间。

有什么建议吗? 谢谢你们。

1 个答案:

答案 0 :(得分:0)

很难说是导致outOfMemoryError例外的原因,但有办法解决这个问题。这个问题的根本原因可以参考:

  1. JVM中没有足够的内存;
  2. 本机线程不够,无法创建更多线程;
  3. 您可以使用 jconsole 来调试此问题,这是一个查看JVM中的内存,线程,类使用情况的工具。此外,异常消息可以在某些情况下指出根本原因。