0

I'm not too far on in developing my app and i'm getting a java.lang.OutOfMemoryError. Here's the logcat:

02-24 14:02:54.957: E/art(28628): Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 8 free bytes and 8B until OOM" (recursive case)
02-24 14:02:54.965: E/art(28628): "FinalizerDaemon" daemon prio=5 tid=8 Runnable
02-24 14:02:54.965: E/art(28628):   | group="system" sCount=0 dsCount=0 obj=0x12c260e0 self=0xac4a5400
02-24 14:02:54.965: E/art(28628):   | sysTid=28641 nice=0 cgrp=apps sched=0/0 handle=0xac4b9b00
02-24 14:02:54.965: E/art(28628):   | state=R schedstat=( 2442370612 111306164 635 ) utm=229 stm=15 core=1 HZ=100
02-24 14:02:54.965: E/art(28628):   | stack=0xb40fe000-0xb4100000 stackSize=1036KB
02-24 14:02:54.965: E/art(28628):   | held mutexes= "mutator lock"(shared held)
02-24 14:02:54.965: E/art(28628):   at com.android.internal.os.BinderInternal$GcWatcher.finalize(BinderInternal.java:51)
02-24 14:02:54.965: E/art(28628):   at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
02-24 14:02:54.965: E/art(28628):   at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
02-24 14:02:54.965: E/art(28628):   at java.lang.Thread.run(Thread.java:818)
02-24 14:02:54.965: E/System(28628): Uncaught exception thrown by finalizer

I'm trying to make a list and anytime I retrieve the data to make the list I get the error.

Here is class that extends the list fragment

`

public class BillReminderListFragment extends ListFragment {
private ArrayList<Bill> mBills;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    mBills = BillLab.get(getActivity()).getBills(); <---(this is what is causing the error)
}
}

Here is the class that holds the data

public class BillLab {
private ArrayList<Bill> mBills;
private static BillLab sBillLab;
private Context mAppBillContext;

private BillLab(Context appBillContext){
    mAppBillContext = appBillContext;
    mBills = new ArrayList<Bill>();
    for (int i = 0; 1 < 100; i ++){
        Bill b = new Bill();
        b.setTitle("Bill #" + i);
        b.setDate(new Date());
        mBills.add(b);
    }
}

public static BillLab get(Context c){
    if (sBillLab == null){
        sBillLab = new BillLab(c.getApplicationContext());


    }
    return sBillLab;
}

public Bill getBill(UUID id){
    for (Bill b: mBills) {
        if (b.getId().equals(id))
            return b;
    }
    return null;
}

public ArrayList<Bill> getBills(){
    return mBills;
}

}

Please help. This is my final project in college and I don't have much time. Thank you.

`

1
  • 1
    there is an infinite loop. Commented Feb 24, 2015 at 7:20

3 Answers 3

5

Your for loop has a typo: for (int i = 0; 1 < 100; i ++)

should be i < 100. It's running out of memory because 1 is always less than 100.

Sign up to request clarification or add additional context in comments.

2 Comments

Thank you so much. I was really stressed when I was writing the code and I wasn't testing it. I'm suppressed I made such a silly mistake `
Happens to all of us!
1

Change following line

for (int i = 0; 1 < 100; i ++){

to

for (int i = 0; i < 100; i ++){

Comments

0

this method had 2 root cause, one is mention by @Nag edi, but the root cause for made java.lang.OutOfMemoryError is: -

private BillLab(Context appBillContext){
    mAppBillContext = appBillContext;
    mBills = new ArrayList<Bill>();
    for (int i = 0; 1 < 100; i ++){  // this line will cause the infinity loop only    
        Bill b = new Bill();      // this is the root cause to create every single object for each loop.
        b.setTitle("Bill #" + i);
        b.setDate(new Date());
        mBills.add(b);
    }
}

to :-

   private BillLab(Context appBillContext){
        mAppBillContext = appBillContext;
        mBills = new ArrayList<Bill>();
        Bill b = null;
        for (int i = 0; i < 100; i ++){
            b = new Bill();
            b.setTitle("Bill #" + i);
            b.setDate(new Date());
            mBills.add(b);
        }
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.