Java 内存结构之虚拟机栈

2.虚拟机栈

  • 定义:虚拟机栈(Java Virtual Machine Stacks)就是每个线程运行需要的内存空间,栈由一个一个的栈帧(Frame)组成,栈帧就是每个方法运行时需要的内存(方法的参数、局部变量、返回地址)
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法

问题分析

  • 垃圾回收是否涉及栈内存?不涉及
  • 栈内存分配越大越好吗?不是,设置大一点只不过是增加了递归调用的效率
  • 方法内的局部变量是否线程安全?
    • 如果方法内局部变量没有逃离方法的作用范围,它就是线程安全的
    • 如果局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全问题

栈内存溢出

  • 栈帧过多会导致栈内存溢出(方法递归调用就会导致栈内存溢出)
  • 栈帧过大也会导致栈内存溢出(这种情况不太容易出现)
  • 两个类之间互相引用,在JSON格式转换的时候会出现递归调用,导致栈内存溢出
posted on 2019-10-14 23:01  行之间  阅读(298)  评论(0编辑  收藏  举报