JAVA虚拟机栈的常见异常与如何设置栈的大小

9 篇文章 0 订阅
1.虚拟机常见异常
  • Java虚拟机规范允许Java栈的大小是动态的或者是固定不变的。
    • 如果采用固定大小的Java虚拟机栈,那每一个线程的Java虚拟机栈容量可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过java虚拟机栈允许的最大容量,java虚拟机将会抛出一个StackOverflowError异常;
    • 如果Java虚拟机栈可以动态扩展,并且尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那Java虚拟机将会抛出一个OutOfMemoryError异常;
2.测试栈的大小
/**
 * 创建人: 渣高帆 <br/>
 * 创建时间: 2020/6/30 11:32<br/>
 * JDK 1.8
 */
public class Stack_Test01 {
   public static int i=1;
    public static void main(String[] args) {
        //我的电脑默认测试JVM栈的大小为9750左右
        //添加JVM命令行参数:-Xss1024k 之后为9777左右
        //添加JVM命令行参数:-Xss1m 之后为9789左右
        System.out.println(i++);
        main(args);
    }
}
3.设置栈内存大小

我们可以使用虚拟机参数-Xss 选项来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度;

-Xss size

设置线程堆栈大小(以字节为单位)。附加字母kK表示KB,mM表示MB,和gG表示GB。默认值取决于平台:

  • Linux / x64(64位):1024 KB
  • macOS(64位):1024 KB
  • Oracle Solaris / x64(64位):1024 KB
  • Windows:默认值取决于虚拟内存

下面的示例以不同的单位将线程堆栈大小设置为1024 KB:

复制-Xss1m (1mb)
-Xss1024k  (1024kb)
-Xss1048576

设置方式如下图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值