如何设置主线程的堆栈大小

时间:2013-11-27 16:42:18

标签: java multithreading

对于java,我们有JVM参数-Xss,它设置特定线程的堆栈大小。

我们可以将此参数设置为JVm参数,或者在Thread Constructor中指定它: -

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

这将分配一个新的Thread对象,使其具有target作为其运行对象,具有指定的名称作为其名称,并且属于group引用的线程组,并具有指定的堆栈大小。

但是如何设置正在运行的main方法的堆栈大小。理想情况下,main方法本身也是一个线程,那么除了使用-Xss参数之外,我们如何明确指定其堆栈大小?

4 个答案:

答案 0 :(得分:3)

-Xss正是这样做的方法。它告诉运行时确切地创建主线程时要使用的long stackSize参数。

但是,您无法更改现有线程的堆栈大小,因此您唯一能做的就是创建自己的“主”线程!请记住,普通的“主”线程并不特别。只需启动另一个线程并让它运行主程序,然后完成JVM主线程。

答案 1 :(得分: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行。

答案 2 :(得分:1)

  

除了使用-Xss之外,我们如何明确指定[主线程]的堆栈大小   参数?

你做不到。它需要在创建线程时指定,唯一的方法是使用jvm args。

答案 3 :(得分:1)

main线程是用户线程,但是一个特殊的线程。无法单独为主线程指定堆栈大小。您可以为所有线程或创建时的特定线程指定 - Xss

请注意main,因为不是由用户创建,而是由JVM 创建。