Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OutOfMemoryError at AbstractStringBuilder enlargeBuffer

I am reading the youtube response in Stream and converting it to String. using the below code:

URL: http://gdata.youtube.com/feeds/api/users/cnn/uploads?&v=2&max-results=25&alt=json

private String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }        
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    } 

This code is working in fine in all devices except Android 4.0 devices. I am getting the below logcat:

java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:278)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.OutOfMemoryError
        at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
        at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
        at java.lang.StringBuilder.append(StringBuilder.java:216)
        at com.android.mypack.MyApplications.convertStreamToString(MyApplications.java:959)
        at com.android.mypack.MyApplications.access$61(MyApplications.java:951)
        at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:2303)
        at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:1)
        at android.os.AsyncTask$2.call(AsyncTask.java:264)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        ... 5 more
java.lang.OutOfMemoryError
        at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
        at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
        at java.lang.StringBuilder.append(StringBuilder.java:216)
        at com.android.mypack.MyApplications.convertStreamToString(MyApplications.java:959)
        at com.android.mypack.MyApplications.access$61(MyApplications.java:951)
        at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:2303)
        at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:1)
        at android.os.AsyncTask$2.call(AsyncTask.java:264)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:856)

Please help me to overcome this error. Thanks in Advance.

like image 734
wolverine Avatar asked Dec 18 '12 07:12

wolverine


1 Answers

Well, OutOfMemoryErrors are coming obviously when the virtual machine runs out of memory. The important point here is that the exact stack trace might not be informative, because it could happen that another thread uses all of the memory. Or something memory-consuming happened on this thread before this code, and this code was only the "last straw". This URL certainly does not contain too many bytes, I think the problem is in another place.

You could try a memory analyzer: Android ==> Memory Analysing ==> Eclipse memory analyzer?

like image 191
lbalazscs Avatar answered Nov 15 '22 17:11

lbalazscs