Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what do we mean by Clamp target GC heap from 55.234MB to 48.000MB?

I'm using ImageLoader in one of ma listview to display images from URL. While scrolling the list, app didn't response. I checked logcat and got this log report http://pastebin.com/Zfsk7r9X. In this log, "Clamp target GC heap from 55.234MB to 48.00MB" is shown. How can I avoid this memory issue. I've done System.GC() in ImageLoader class. decodeFile() which i used is shown below

// decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f) {
    try {

        // decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        // Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE = 70;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE
                    || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {
    }
    return null;
}
like image 205
ASP Avatar asked Dec 15 '12 05:12

ASP


1 Answers

The message "Clamp target GC heap" is by logged by the VM when it gets desperate, a heap allocation fails, and the heap is returned to a previous ideal limit after the attempt. From documentation of setIdealFootprint in HeapSource.cpp:

/*
 * Sets the maximum number of bytes that the heap source is allowed
 * to allocate from the system.  Clamps to the appropriate maximum
 * value.
 */
like image 113
yakshaver Avatar answered Oct 30 '22 12:10

yakshaver