对于java,我们有JVM参数-Xss
,它设置特定线程的堆栈大小。
我们可以将此参数设置为JVm参数,或者在Thread Constructor中指定它: -
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
这将分配一个新的Thread对象,使其具有target作为其运行对象,具有指定的名称作为其名称,并且属于group引用的线程组,并具有指定的堆栈大小。
但是如何设置正在运行的main方法的堆栈大小。理想情况下,main方法本身也是一个线程,那么除了使用-Xss
参数之外,我们如何明确指定其堆栈大小?
答案 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 创建。