2015-10-20 101 views
2

我無法在android中創建像素值超過(100,100,3)的3D陣列。然而,它與上面提到的維數組一起工作的很好。Android中的三維陣列

我的代碼:

double mat[][][] = new double[400][400][3]; 
Error:java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available 

然而,

double mat[][][] = new double[100][100][3]; 

工作正常。我正在使用模擬虛擬機來運行android應用程序。

+1

你會得到什麼樣的錯誤? – ligi

+0

java.lang.OutOfMemoryError:嘗試拋出OutOfMemoryError時拋出OutOfMemoryError;沒有堆棧可用 –

回答

3

這可能是記憶。在Android double需要64位,這是8個字節。

您正在創建一個三維陣列400x400x3如此規模將

400 * 400 * 3 * 8 = 3.7MB

而較小規模將

100 * 100 * 3 * 8 = 234KB

它是更容易得到大小234KB塊,而不是3.7MB 。


Tnx to Luca comment

+0

你可能意味着64位。這是8個字節。這個數字取決於CPU架構。大多數Android手機所擁有的ARM體系結構都需要64位來表示雙倍。 400 * 400 * 3 * 8 = 3,66 MB –

+0

再加一點[數組引用](http://stackoverflow.com/questions/5839434/pointer-size-how-big-is-an-object-reference )。 –

+0

這是否意味着,難以處理上面提到的佔用內存的3D數組。處理這些問題的方法有哪些?其實我正在使用圖片進行圖像處理,大多數情況下我都遇到過像素會變成高清的點。 –