概述很多Java开发者提到Java内存结构的时候,会很粗略的理解JVM中的内存区域只有Java堆(heap)和Java栈(stack)?什么是Java虚拟机栈?Java虚拟机栈(JavaVirtualMachineStack),早期也称为Java栈。每个线程在创建时都会创建一个虚拟机栈,并在其中存储一个栈帧(StackFrame),对应一次又一次的Java方法调用。是线程私有的生命周期,生命周期与线程一致。特点栈是一种快速有效的存储分配方式,其存取速度仅次于程序计数器。如何理解栈管理操作和栈管理存储?该函数负责Java程序的运行。它保存了方法的局部变量(8种基本数据类型,对象的引用地址),一些结果,参与方法的调用和返回。局部变量vs成员变量(或属性)基本数据变量vs引用类型变量(类、数组、接口)即:栈解决了程序的运行问题,也就是程序如何执行,或者程序如何处理数据。堆解决了数据存储的问题,即数据怎么放,放在哪里。堆栈上是否存在垃圾回收?没有GC;存在OOMStackOverFlowError?内存不足错误?Java虚拟机规范允许Java堆栈的大小是动态的或固定的。如果使用固定大小的Java虚拟机栈,每个线程的Java虚拟机栈容量可以在创建线程时独立选择。如果线程请求的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机将抛出StackOverflowError异常。如果Java虚拟机栈可以动态扩展,而在尝试扩展时无法申请到足够的内存,或者创建新线程时没有足够的内存创建对应的虚拟机栈,那么Java虚拟机就会抛出——OutOfMemoryError异常。如何设置堆栈内存的大小?-Xsssize(即:-XX:ThreadStackSize)一般默认为512k-1024k,具体取决于操作系统。栈的大小直接决定了函数调用的最大可达深度。Java面试题中,用什么参数设置栈的大小?(阿里)栈空间值设置过大,会减少系统可以用来创建的线程数。一般一个进程中通常有3000-5000个线程。连续三个码字好不容易求点赞收藏~
