Java 内存结构之虚拟机栈

Posted 行之间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 内存结构之虚拟机栈相关的知识,希望对你有一定的参考价值。

2.虚拟机栈

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

问题分析

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

栈内存溢出

  • 栈帧过多会导致栈内存溢出(方法递归调用就会导致栈内存溢出)
  • 栈帧过大也会导致栈内存溢出(这种情况不太容易出现)
  • 两个类之间互相引用,在JSON格式转换的时候会出现递归调用,导致栈内存溢出

以上是关于Java 内存结构之虚拟机栈的主要内容,如果未能解决你的问题,请参考以下文章

探究Java虚拟机栈

探究Java虚拟机栈

02-JVM内存模型:虚拟机栈与本地方法栈

JVM学习笔记四:运行时数据区之虚拟机栈

jvm内存区域之虚拟机栈

jvm内存区域之虚拟机栈