JVM默认栈大小

JVM 里线程栈的大小不是一个固定值,而是由 操作系统平台、JVM 实现版本、以及启动参数 共同决定的。

常见情况(以 HotSpot 为例):

  • Linux / macOS
    • 64 位 JVM 默认大约是 1M (1024 KB)
    • 32 位 JVM 默认大约是 320 KB ~ 512 KB
  • Windows
    • 64 位 JVM 默认大约是 1M
    • 32 位 JVM 默认大约是 320 KB ~ 512 KB

这个大小是"每个线程的栈空间",即每创建一个线程都会分配这么多内存给它的栈。


如何查看默认值

你可以在命令行里运行:

bash 复制代码
java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

输出示例:

plain 复制代码
     size     1024k     0     manageable  -XX:ThreadStackSize

这里的 1024k 就是默认的线程栈大小。


如何修改

如果你希望调整(比如减少栈大小以允许创建更多线程,或增加栈大小以避免深递归导致的 StackOverflowError),可以通过参数:

bash 复制代码
java -Xss2m MyApp   # 每个线程的栈大小设置为 2M

写一段 Java 小程序,可以直接打印出当前 JVM 的线程栈大小(通过反射或启动参数获取)

java 复制代码
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;

public class ThreadStackSizeDemo {
    public static void main(String[] args) {
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        List<String> inputArgs = runtimeMXBean.getInputArguments();

        // 查找 -Xss 参数
        String stackSize = inputArgs.stream()
                .filter(arg -> arg.startsWith("-Xss"))
                .findFirst()
                .orElse("未显式设置(使用默认值)");

        System.out.println("线程栈大小参数: " + stackSize);

        // 提示:默认值要通过 java -XX:+PrintFlagsFinal | grep ThreadStackSize 来查看
        System.out.println("注意:如果没有显式设置 -Xss,则使用平台相关的默认值 (通常 1M for 64位JVM)。");
    }
}
相关推荐
IT_陈寒1 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰1 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户8356290780512 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs2 小时前
Go语言第二章(小无相功)
后端·go
用户8356290780512 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k2 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生2 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k3 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
ServBay3 小时前
不会写代码也能建站?AI 时代,非技术创始人如何从零搭建自己的 Web 项目
后端·mcp