2013-11-27 34 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主线程。

相关问题