2010-02-16 23 views
0

我一直在閱讀關於增加JVM堆棧大小(即允許更深的遞歸)的內容。Java:會減少堆棧大小加速頻繁的方法調用?

但是我在問自己,會不會遞減的堆棧大小加快方法調用?

也許我的理解是錯誤的,但我相信,每個堆棧的分配速度(只爲遞歸方法調用)取決於它的大小。

有人能指點我的基準,或者至少是關於這個話題的背景信息嗎?

謝謝!

回答

1

每個平臺的Java虛擬機實現將有所不同,但總的來說,這不會是一個具有重大影響的因素。分配內存是一種非常常見的操作,可能會進行高度優化。

例如,使用一個(pointer, size)元組列表來指示堆棧空間將會很容易。現在你只需要說出你想要的堆棧的size和指向保留空間的開始的pointer,不管你想要多少空間。

+0

因此,如果它不是一個很大的性能問題,爲什麼最大堆棧大小有限(默認情況下),即使在數千次遞歸之後,有時候方法調用「失敗」? –

+0

爲什麼會發生這種情況有很多種可能性。例如,JVM中的每個線程都有自己的堆棧。您的堆棧大小限制了您可以擁有的線程數量;如果它太大,則會耗盡內存,並且您將無法分配新線程。 –

+0

@ java.is.for.desktop:必須限制最大堆棧大小,以便機器不會快速耗盡內存。速度不是問題。整體內存消耗是限制的原因。 –