概述
有不少 Java 开发人员一提到 Java 内存构造,就会十分粗粒度地将 JVM 中的内存区了解为仅有 Java 堆 (heap) 和 Java 栈(stack)?
Java 虚拟机栈是什么?
Java 虚拟机栈(Java Virtual Machine Stack),晚期也叫 Java 栈。每个线程在创立时都会创立一个虚拟机栈,其外部保留一个个的栈帧(Stack Frame),对应着一次次的 Java 办法调用。
是线程公有的
生命周期
生命周期和线程统一。
特点
栈是一种疾速无效的调配存储形式,访问速度仅次于程序计数器。
如何了解栈管运行,堆管存储?
作用
主管 Java 程序的运行,它保留办法的局部变量(8 种根本数据类型、对象的援用地址)、局部后果,并参加办法的调用和返回。
局部变量 vs 成员变量 (或属性)
根本数据变量 vs 援用类型变量(类、数组、接口)
即:栈解决程序的运行问题,即程序如何执行,或者说如何解决数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。
栈中存在垃圾回收吗?
不存在 GC ; 存在 OOM
StackOverFlowError?OutOfMemoryError?
Java 虚拟机标准容许 Java 栈的大小是动静的或者是固定不变的。
如果采纳固定大小的 Java 虚拟机栈,那每一个线程的 Java 虚拟机栈容量能够在线程创立的时候独立选定。如果线程申请调配的栈容量超过 Java 虚拟机栈容许的最大容量,Java 虚拟机将会抛出一个 StackOverflowError 异样。
如果 Java 虚拟机栈能够动静扩大,并且在尝试扩大的时候无奈申请到足够的内存,或者在创立新的线程时没有足够的内存去创立对应的虚拟机栈,那 Java 虚拟机将会抛出—个 OutOfMemoryError 异样。
如何设置栈内存的大小?-Xss size (即:-XX:ThreadStackSize)
个别默认为 512k-1024k,取决于操作系统。
栈的大小间接决定了函数调用的最大可达深度。
面试题
Java 中,栈的大小通过什么参数来设置?(阿里)
设置的栈空间值过大,会导致系统能够用于创立线程的数量缩小。
个别一个过程中通常有 3000-5000 个线程。
跪求三连
码字不易,还请点个赞和珍藏~