2010-02-16 25 views
0

我一直在阅读关于增加JVM堆栈大小(即允许更深的递归)的内容。Java:会减少堆栈大小加速频繁的方法调用?

但是我在问自己,会不会递减的堆栈大小加快方法调用?

也许我的理解是错误的,但我相信,每个堆栈的分配速度(只为递归方法调用)取决于它的大小。

有人能指点我的基准,或者至少是关于这个话题的背景信息吗?

谢谢!

回答

1

每个平台的Java虚拟机实现将有所不同,但总的来说,这不会是一个具有重大影响的因素。分配内存是一种非常常见的操作,可能会进行高度优化。

例如,使用一个(pointer, size)元组列表来指示堆栈空间将会很容易。现在你只需要说出你想要的堆栈的size和指向保留空间的开始的pointer,不管你想要多少空间。

+0

因此,如果它不是一个很大的性能问题,为什么最大堆栈大小有限(默认情况下),即使在数千次递归之后,有时候方法调用“失败”? –

+0

为什么会发生这种情况有很多种可能性。例如,JVM中的每个线程都有自己的堆栈。您的堆栈大小限制了您可以拥有的线程数量;如果它太大,则会耗尽内存,并且您将无法分配新线程。 –

+0

@ java.is.for.desktop:必须限制最大堆栈大小,以便机器不会快速耗尽内存。速度不是问题。整体内存消耗是限制的原因。 –