2013-11-27 52 views
0

在java的情況下,我們有JVM參數-Xss,它設置特定線程的堆棧大小。如何設置主線程的堆棧大小

我們可以將此參數設置爲JVM參數或螺紋構造像指定: -

Thread(ThreadGroup group, Runnable target, String name, long stackSize) 

這將分配一個新的Thread對象,以便將target作爲其運行對象,有指定的名稱作爲它的名稱,屬於組引用的線程組,並且具有指定的堆棧大小。

但是如何設置正在運行的main方法的堆棧大小。理想情況下,main方法本身也是一個線程,所以除了使用-Xss參數外,我們如何明確指定其堆棧大小?

+1

你需要什麼?你可以在main方法中創建新線程並執行其中的所有邏輯嗎? –

+0

我不使用這是否可能。在Linux(POSIX)上,一個線程的堆棧在其他地方結束。所以你可以通過調用'setr​​limit'或'pthread_attr_setstacksize'來調整主線程的堆棧。但只要沒有其他線程。當你需要擴展第一個線程時,你不能移動第二個線程的堆棧。所以當JVM啓動GC線程時,如何擴展第一個(主)線程的大小是沒有辦法的。 – ibre5041

回答

2

但是如何設置正在運行的main方法的堆棧大小。理想情況下,main方法本身也是一個線程,所以除了使用-Xss參數外,我們如何明確指定其堆棧大小?

-Xss參數也會影響主堆棧大小。你不需要做任何特別的設置。如果您真的問是否可以將主堆棧大小與-Xss參數分開設置,則不能。

例如,你可以設置參數-Xss和看到更多或更少的堆棧溢出異常行:

public class Foo { 
    public static void main(String[] args) { 
     foo(); 
    } 
    private static void foo() { 
     foo(); 
    } 
} 

-Xss=128k給人〜444線,而256K給人〜1025線。

1

除了使用-Xss 參數外,我們如何明確指定[主線程的]堆棧大小?

你不行。它需要在創建線程時指定,唯一的方法就是使用jvm args。

1

main線程是用戶線程,但是是一個特殊線程。不能單獨爲主線程指定堆棧大小。您可以爲所有線程或創建時的特定線程指定 - Xss

請注意main的可能性,因爲這是不是由用戶創建的,而是由JVM創建的。

3

-Xss正是這樣做的方式。它會在創建主線程時精確告訴運行時參數long stackSize

但是,您無法更改已有線程的堆棧大小,因此您唯一能做的就是創建您自己的「主」線程!請記住,普通的「主」線程並不是什麼特別的東西。只需啓動另一個線程並讓它運行主程序,然後完成JVM主線程。

相關問題