J2me - HTTP 请求中的内存不足
Posted
技术标签:
【中文标题】J2me - HTTP 请求中的内存不足【英文标题】:J2me - OutofMemory in HTTP request 【发布时间】:2016-12-09 09:18:46 【问题描述】:我在一个 j2me 项目中有一个方法,在正常工作 2 天后,它崩溃了。出现的错误如下:
Contacting website...
java.lang.OutOfMemoryError
(stack trace incomplete)
上述方法是用于与网站通信的方法。它接收一个字符串和一个模式选择器(i=1 或其他)并处理请求。代码如下:
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 天时间才会发生,这将花费我大量时间。
有什么建议吗? 谢谢大家。
【问题讨论】:
你能提供更多的堆栈跟踪吗? 遗憾的是,这是我当时得到的唯一输出.. 您的代码中有一些错误。由于您已经在 finally 块中关闭了输入流和连接,因此您不需要在 if 分支中关闭它们。并将 if (connection == null) 更改为 if (connection != null)。 哦!感谢您指出那些!已经改正了。不过,这个问题不太可能解决,对吧? 也许,您可以使用 jconsole 查看 JVM 状态并找出根本原因。 【参考方案1】:很难说导致outOfMemoryError
异常的原因,但有一些方法可以处理它。这个问题的根本原因可以参考这个:
-
JVM 内存不足;
原生线程不够,无法创建更多线程;
您可以使用 jconsole 来调试这个问题,这是一个查看 JVM 中的内存、线程、类使用情况的工具。此外,在某些情况下,异常消息可以指出根本原因。
【讨论】:
以上是关于J2me - HTTP 请求中的内存不足的主要内容,如果未能解决你的问题,请参考以下文章