目录
(二)本地方法栈(Native Method Stacks)
一. JVM内存结构
JVM的内存结构说的就是运行时数据区,该区域又分成五个内存结构:
- 线程私有:Java栈、本地方法栈、程序计数器
- 线程共享:堆、方法区
下面开始对每个结构进行讲解。
(一)Java栈(Java Stack)
- 该区域是JVM内存结构中最重要的区域,它是Java线程执行方法的内存模型,每个线程都会拥有自己独立的栈区,不与其他线程共享;
- 线程中的每个方法在执行时都会创建一个属于该方法的栈帧(Frames),用于存储局部变量表(Local Variables)、操作数栈(Operand Stacks)、动态链接(Dynamic Linking)、方法出口信息等;
- 对于八种基本数据类型(byte、short、int、long、float、double、char、boolean)的局部变量,在栈中存储的是它们对应的值;
- 对于定义定义在方法体中的引用类型的变量存储的是对象引用,不是对象本身,对象引用是对象在堆中的地址;
- Java栈不需要进行垃圾回收,因为它的生命周期是跟线程一致的,只要线程执行完,就会被释放掉。
JVM为该区域定义了下面两种异常类型:
- 线程请求的栈深度大于虚拟机栈所允许的深度,将抛出StackOverFlowError异常
- 若虚拟机栈可动态扩展,当无法申请到足够内存空间时将抛出OutOfMemoryError
- 通过jvm参数–Xss指定栈空间,空间大小决定函数调用的深度
(二)本地方法栈(Native Method Stacks)
本地方法栈也是一个栈结构,并且是线程私有ÿ