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)。");
    }
}
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm