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

Java 为什么Android中的调用堆栈是8KB?,java,android,Java,Android,我编写了一些简单的树/图算法,但很快就遇到了许多stackoverflowerrror异常和一些非常小的数据。事实证明,在我的三星Galaxy S3上,堆栈默认为8KB,内存为2GB。10年前,我的电脑有一个1MB的堆栈。我现在使用的Linux机器有4GB内存。我手机的内存只有我电脑内存的一半,但我手机的堆栈却小了1000多倍。为什么? 究竟是什么真正的技术原因使得Android开发者不得不比其他操作系统更严格地限制堆栈?例如,这是因为一些安卓设备有少量内存,比如1MB或10MB吗?我还没有调查

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


究竟是什么真正的技术原因使得Android开发者不得不比其他操作系统更严格地限制堆栈?例如,这是因为一些安卓设备有少量内存,比如1MB或10MB吗?我还没有调查过设备的范围,但我发现很难相信任何设备会这么小。

只需创建一个具有所需堆栈大小的
线程,并在其中运行代码即可


我认为默认的
8KB
是因为它很可能是在堆上分配的,并且32位体系结构没有太多的VRAM可浪费(使用2GB内存分割,每个进程只有2GB可用)。分配一个大堆栈将永久性地将其从进程的可用VRAM中删除。这与传统的本机进程不同,在本机进程中,堆栈从上到下增长,而堆从下到上增长。

Samsung/Google的架构设计决策?因为这是默认堆栈大小(IIRC取决于版本和/或设备).以基于意见的方式结束此项说明我没有理由进行此减值。如果有原因,你会把它写下来作为一个答案,而不是投票结束。同样巧合的是,关闭该平台的国防部为SO工作,为Android开发,没有代表@Dog。他们可能对你在他们最喜欢的平台上指出如此愚蠢的问题感到愤怒。该设备的RAM总量与你的问题无关。因为每个进程/应用程序都有自己的最大可用RAM,对于较旧的平台,硬编码的RAM只有16 MB。即使对于更现代的设备/操作系统,最大可用RAM通常也只有32~48 MB左右。但是8KB确实很小,我想他们不希望人们编写递归程序?它是在固件中设置的。如果你愿意的话,你可以改变它,但是在修改安卓系统和刷新手机之间,你最好重构你的代码。