2015-06-18 40 views
1

我正在從分析數據庫中提取登錄用戶的喜好。然而,當我做了查詢,我得到一個OutOfMemoryError:在啓動時獲取多個項目時出現內存不足錯誤

java.lang.OutOfMemoryError: Failed to allocate a 78089518 byte allocation with 16777216 free bytes and 26MB until OOM 
    at java.lang.String.<init>(String.java:332) 
    at java.lang.String.<init>(String.java:149) 
    at java.lang.String.<init>(String.java:119) 
    at com.parse.ParseRESTCommand.onResponse(ParseRESTCommand.java:176) 
    at com.parse.ParseRequest$3.then(ParseRequest.java:229) 
    at com.parse.ParseRequest$3.then(ParseRequest.java:225) 
    at bolts.Task$14.run(Task.java:796) 
    at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105) 
    at bolts.Task.completeAfterTask(Task.java:787) 
    at bolts.Task.continueWithTask(Task.java:599) 
    at bolts.Task.continueWithTask(Task.java:610) 
    at bolts.Task$12.then(Task.java:702) 
    at bolts.Task$12.then(Task.java:690) 
    at bolts.Task$14.run(Task.java:796) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 

查詢我做如下所示:

ParseQuery<Like> query = ParseQuery.getQuery(Like.class); 
    query.include("user"); 
    query.setLimit(1000); 
    query.whereEqualTo("user", ParseUser.getCurrentUser()); 
    query.addDescendingOrder("createdAt"); 

一些需要注意的,如果我限制這100它是好的。在限制範圍內玩耍時,如果限制超過600,它似乎會拋出錯誤。另外需要注意的是,我做了一個類似的調用,從Parse獲取1000個項目,完全沒有任何問題。它似乎與這個確切的查詢有關。

有沒有人遇到過類似的問題?

+1

我不確定你的數據庫是什麼樣子,但可能是因爲你喜歡的類非常大,並且你包含了與當前用戶相匹配的每個用戶(對象)(雖然我不知道爲什麼你會有多個你的db中的當前用戶) – Naveed

回答

1

恕我直言,你只是太多。包含「用戶」實體或許相當大,你拿他們1000,這看起來很錯誤。你必須以不同的方式做,按需提取或在用戶列表上實施某種「滾動」。或者,您可以僅獲取足夠用於此特定情況的一些「用戶」屬性,其餘部分將在稍後加載。

query.include(「user.Id」); query.include(「user.avatar」);

+0

看起來像你是對的,它包括每個項目的用戶 – Sree

0

您可能正在加載對象的所有字段,可能是帶圖像的BLOB字段?

您應該指定在從數據庫查詢時需要使用的字段。

相關問題