【发布时间】:2012-11-05 14:55:00
【问题描述】:
他们在 android.com 上说,如果您使用 Java,则可以使用的最大内存为 16 MB。至少这是设备应该支持的。如果您的手机较旧,您会发现无法获得更多,反而会收到 OutOfMemoryError。如果您使用 NDK 做同样的事情,则不会。在我的应用程序中,我试图获得 50MB 甚至更多,到目前为止,Android 还算不错。
我在 android.com 上没有找到任何与此相关的内容。
有没有像 Java 那样的限制?
如果是:限制是多少?
如果不是:这样做有什么好处?
问题是,我必须根据该大小构建我的代码。
[编辑:] 我尝试了 Seva Alekseyev 的建议。
root@android:/ # ulimit -a
ulimit -a
time(cpu-seconds) unlimited
file(blocks) unlimited
coredump(blocks) 0
data(KiB) unlimited
stack(KiB) 8192
lockedmem(KiB) 64
nofiles(descriptors) 1024
processes 7806
flocks unlimited
sigpending 7806
msgqueue(bytes) 819200
maxnice 40
maxrtprio 0
resident-set(KiB) unlimited
address-space(KiB) unlimited
root@android:/ # ulimit -v
ulimit -v
unlimited
root@android:/ #
我请求的内存(通过使用“alloc”或“new”)是虚拟内存(ulimit -v)。所以没有机会弄清楚我能得到多少?!
【问题讨论】:
-
java / ndk 没有硬性限制,16mb 更像是您可以预期的数量。你可以得到尽可能多的东西,但 50mb 几乎可以保证在 ram 的旧设备上失败
-
在我们的 HTC Legend 上,用 Java 获得超过 16 MB 是不可能的。但是我们能够在同一设备上的 C/C++ 部分中获得 >16 MB(在我们的示例中为 50 MB)。
-
本机子系统受内核级别的内存使用限制。查找
ulimitshell 命令,并使用它。 Android 就是这样,无法保证您永远不会遇到限制低得离谱的设备。
标签: android android-ndk