为什么Android 8KB中的调用堆栈?

时间:2013-08-13 20:48:02

标签: java android

我编写了一些简单的树/图算法,但是很快就遇到了很多StackOverflowError例外的一些非常小的数据。事实证明,我的三星Galaxy S3上的堆栈默认为8KB,它有2GB的RAM。 10年前我的电脑有1MB的堆栈。我正在使用的Linux机器现在有4GB RAM。我手机的RAM只有我电脑内存的一半,但手机的内存却小了1000多倍。为什么呢?

Android开发人员必须比其他操作系统更多地限制堆栈的实际技术原因是什么?例如,是因为一些Android设备有少量的RAM,如1MB或10MB?我没有调查设备的范围,但我发现很难相信任何设备都会这么小。

1 个答案:

答案 0 :(得分:0)

只需创建一个具有所需堆栈大小的Thread并在其中运行代码。

我认为8KB的默认值是由于它很可能是在堆上分配的,而32位架构没有大量的VRAM浪费在它上面(使用2GB内存分割它每个进程只有2GB可用)。分配大堆将永久地将其从流程的可用VRAM中取出。这与传统的本机进程不同,堆栈从顶部到底部逐渐增长,而堆从底部到顶部增长。