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)。");
    }
}
相关推荐
程序员黑豆2 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
GreenTea3 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
风流 少年3 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅3 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
万少4 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
小席是个热心肠4 小时前
AI相关的自我学习
java·人工智能·学习
数智化管理手记6 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_29147 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统7 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
IT_陈寒8 小时前
Python的GIL让我多写了500行代码
前端·人工智能·后端