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

Java 如何设置主线程的堆栈大小,java,multithreading,Java,Multithreading,对于java,我们有JVM参数-Xss,它设置特定线程的堆栈大小 我们可以将此参数设置为JVm参数,或在线程构造函数中指定它,如:- Thread(ThreadGroup group, Runnable target, String name, long stackSize) 这将分配一个新的线程对象,使其具有目标作为其运行对象,具有指定的名称作为其名称,并且属于组引用的线程组,并且具有指定的堆栈大小 但是如何设置正在运行的main方法的堆栈大小。理想情况下,main方法本身也是一个线程,那么

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

我们可以将此参数设置为JVm参数,或在线程构造函数中指定它,如:-

Thread(ThreadGroup group, Runnable target, String name, long stackSize)
这将分配一个新的线程对象,使其具有目标作为其运行对象,具有指定的名称作为其名称,并且属于组引用的线程组,并且具有指定的堆栈大小

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

除了使用-Xss外,我们如何明确指定[main thread]堆栈大小 参数

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

但是如何设置正在运行的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行。

主线程是用户线程,但是一个特殊线程。不能单独为主线程指定堆栈大小。可以为所有线程指定-Xss,也可以在创建时为特定线程指定-Xss

注意main是可能的,因为它不是由用户创建的,而是由JVM创建的。

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


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

您需要它做什么?你能在main方法中创建新线程并执行其中的所有逻辑吗?我不知道这是否可能。在LinuxPOSIX上,一个线程的堆栈从另一个线程的末尾开始。因此,您可以通过调用setrlimit或pthread_attr_setstacksize来调整主线程的堆栈。但只要没有其他线索。当需要扩展第一个线程时,不能移动第二个线程的堆栈。因此,当JVM启动GC线程时,就无法扩展第一个主线程的大小。