java.lang.OutOfMemoryError: Failed to allocate a 1465140570 byte allocation with 1622964 free bytes and 509MB until OOM
at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)
at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)
at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:548)
at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392)
at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)
at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:85)

- 4,492
- 2
- 29
- 59

- 31
- 1
- 4
-
This is mostly because of we don't know that how large data or file app can load whenever we used large data or file to load statically it cause error with some device which dont have enough memory so.. try to use small sizes file.. – Uttam Panchasara Oct 16 '16 at 08:38
4 Answers
I found this help, I'm testing It, when I finish, I will come here to write if It works
update
Well I tested It with an infinite cycle
like this
//global var
Boolean running = true;
Thread MyThread = new Thread(){//create thread
@Override
public void run() {
RequestQueue queue = Volley.newRequestQueue(MyActivity.this);// start one time no more...
String url = "http://192.168.1.78/testget.php?key=123456789"; // my URL
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {//where request return ...
@Override
public void onResponse(String response) {
System.out.println("Volley response: \"" + response +"\"");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("There is an error: "+error.getMessage()); // on error, ex: URL bad... internet down, etc..
}
});
stringRequest.setShouldCache(false);// no caching url...
stringRequest.setRetryPolicy(
new DefaultRetryPolicy(
20000,//time to wait for it in this case 20s
20,//tries in case of error
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
)
);
int i=0;
while(running){
System.out.println("counter: "+i);
i++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("Sleep interrupted");
}
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
System.out.println("onEnd Thread");
}
};
MyThread.start(); // start thread
//in some button declare
running=false;
I tested it 130144 times ~ 18.07 hr, without any error
System.out: Counter: 130141
System.out: Volley response: "something"
System.out: Counter: 130142
System.out: Volley response: "something"
System.out: Counter: 130143
System.out: Volley response: "something"
System.out: Counter: 130144
Getting Error with call newRequestQueue
more than one time
Test with RequestQueue queue = Volley.newRequestQueue(MyActivity.this);
calling more than one time
Example:
//global var
Boolean running = true;
Thread MyThread = new Thread(){//create thread
void getSomethingFromSite(){
RequestQueue queue = Volley.newRequestQueue(MyActivity.this);//calling request more than one time... error you not call more than one time
String url = "http://192.168.1.78/testget.php?key=123456789"; // my url
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {//where request return ...
@Override
public void onResponse(String response) {
System.out.println("Volley response: \"" + response +"\"");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("There is an error: "+error.getMessage()); // on error, ex: URL bad... internet down, etc..
}
});
stringRequest.setShouldCache(false);// no caching url...
stringRequest.setRetryPolicy(
new DefaultRetryPolicy(
20000,//time to wait for it in this case 20s
20,//tries in case of error
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
)
);
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
@Override
public void run() {
int i=0;
while(running){
System.out.println("counter: "+i);
i++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("Sleep interrupted");
}
//call volley
getSomethingFromSite();
}
System.out.println("onEnd Thread");
}
};
MyThread.start(); // start thread
//in some button declare
running false;
Erro with 475 times
I/System.out: Counter: 471
I/System.out: Volley response: "Something"
W/libc: pthread_create failed: couldn't allocate 1064960-byte stack: Out of memory
E/art: Throwing OutOfMemoryError "pthread_create (1040KB stack) failed: Try again"
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: Thread-373
Process: com.masm.testservice, PID: 3821
java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
at java.lang.Thread.nativeCreate(Native Method)
at java.lang.Thread.start(Thread.java:1063)
at com.android.volley.RequestQueue.start(RequestQueue.java:152)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:66)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:78)
at com.masm.testservice.MyService$1.getDataVolley(MyService.java:84)
at com.masm.testservice.MyService$1.run(MyService.java:129)
E/AndroidRuntime: Error reporting crash
java.lang.OutOfMemoryError
at android.os.Parcel.nativeWriteString(Native Method)
at android.os.Parcel.writeString(Parcel.java:536)
at android.app.ApplicationErrorReport$CrashInfo.writeToParcel(ApplicationErrorReport.java:389)
at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4099)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:89)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
Conclusion
You do not call newRequestQueue
more than one time...
you will get error of out memory
or OOM
error.
More links for reference or information:
1.- Out of memory error when use volley library
2.- Volley give me Out of memory exception after I make a lot of request with big amount of data
3.- Volley slow and causing memory leak
4.- Volley framewok request keeps objects in memory

- 1
- 1

- 4,578
- 1
- 41
- 51
OutOfMemoryError occurs when you try to load large data into your app's memory that exceeds the available RAM. I do not know what you are using volley for at the moment but try disabling cache for volley see here or not load a huge file at once or try compressing the file. It would help if you give more detail on what you are trying to achieve and the code section that is causing the error.

- 456
- 3
- 14
This is thrown while trying to read the header, which should be comparatively small. Note as well that the DiskBasedCache size is only 5MB.

- 1
- 1

- 3,574
- 3
- 36
- 47