【问题标题】:Why am I getting an out of memory error?为什么会出现内存不足错误?
【发布时间】:2011-07-25 17:11:04
【问题描述】:

我一直收到这个错误?

07-25 17:04:00.796: ERROR/AndroidRuntime(420): Caused by: java.lang.OutOfMemoryError
07-25 17:04:00.796: ERROR/AndroidRuntime(420):     at org.apache.http.impl.io.AbstractSessionInputBuffer.init(AbstractSessionInputBuffer.java:79)
07-25 17:04:00.796: ERROR/AndroidRuntime(420):     at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)

每次我尝试运行这个方法时:

public void getImages() throws IOException{


    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt");
    HttpResponse response;

        response = httpclient.execute(httppost);


            HttpEntity ht = response.getEntity();

            BufferedHttpEntity buf = new BufferedHttpEntity(ht);

            InputStream is = buf.getContent();


            BufferedReader r = new BufferedReader(new InputStreamReader(is));

            StringBuilder total = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
                total.append(line + "\n");

              imageUrl = total.toString();
              Log.v("getImage1", "Retreived image");
            }
     }

此方法所做的只是从网站上托管的文本文件中检索 URL。

编辑:调试指向我的代码行。运行时出现内存不足错误。

 public void getImages() throws IOException{


    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt");
    HttpResponse response;

**Specifically here:**  response = httpclient.execute(httppost);

【问题讨论】:

  • 请搜索类似问题。我相信你会得到很多类似的帖子,人们已经讨论过这个问题。
  • 你能发布完整的堆栈跟踪吗?很难确定代码中确切的问题行。不过肯定是内存泄漏。
  • @Sagar Hatekar 发布在编辑中调试指向上方的位置。
  • VM 不反对你。您收到 OOM 是因为您的程序一定是内存不足。 :-P

标签: java android out-of-memory


【解决方案1】:

您可能会收到 OOM `因为您正在加载该文本文件,该文件应该很大,位于该 StringBuilder 的内存中。您应该将此文件写入本地文件而不是 StringBuilder 以避免错误。

【讨论】:

  • 好的,所以也许我可以拥有从文本文档中获取字符串的代码。存储在 SQLite 数据库中并从那里提取。唯一的问题是我会经常更改网址。而且我不想继续将 url 存储在数据库中,因为旧 URL 的大小会增加。
  • 您可以在每次导入时清理数据库。
  • 引用文件的内容很简单:https://sites.google.com/site/theitrangers/images/ncaa12.jpg 。当然对于 OOM 来说不够大,甚至在我的手表上也是如此。
  • 嗯……它只是一个简单的文本 URL。那么大家觉得可能是什么呢?当我在现实生活中的调试设备上运行它时,它运行良好
  • 检查你正在使用的虚拟机的内存限制,可能太低了。
【解决方案2】:

如果您的应用程序中没有泄漏,那么这可能与Android HttpClient OOM on 4G/LTE (HTC Thunderbolt) 中讨论(并已修复!)的问题相同

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    相关资源
    最近更新 更多