2015-10-20 85 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数组。处理这些问题的方法有哪些?其实我正在使用图片进行图像处理,大多数情况下我都遇到过像素会变成高清的点。 –