JVM
1、什么是 JVM 内存结构?
JVM 将虚拟机分为5大区域,程序计数器、虚拟机栈、本地方法栈、java堆、方法区;
- 程序计数器:线程私有的,是一块很小的内存空间,作为当前线程执行的字节码的行号指示器,用来存储下一条将要执行的字节码指令的地址;
- 虚拟机栈:线程私有的,每个线程在创建时都会创建一个虚拟机栈,虚拟机栈由许多栈帧组成,每个方法被执行的时候,JVM 都会同步创建一个栈帧,用于存储局部变量表、操作数、动态链接和方法返回等信息。方法执行时,栈帧入栈,执行完成后,栈帧出栈。当线程请求的栈深度超过了虚拟机允许的最大深度时,就会抛出StackOverFlowError;当创建线程时没有足够的栈空间,会抛出 OOM 异常。