Java内存
Java 虚拟机在执行 Java 程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java 虚拟机规范将 JVM 所管理的内存分为以下几个运行时数据区:程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区。 一,内存区域划分 1.线程共享区域: (1)Java堆(对象实例),GC的主要区域,会出现OutOfMemoryError (2)方法区(加载的类信息,常量,静态变量,即时编译器编译后的代码)会出现OutOfMemoryError 2.线程私有区域: (1)虚拟机栈(操作数栈,动态链接,方法返回地址,局部变量) 用于支持虚拟机进行方法方法调用和方法执行的数据结构。生命周期与线程相同,每个方法执行时会创建一个栈帧并入栈,对于执行引擎,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,所关联的方法称为当前方法。 如果申请的栈深度大于虚拟机允许的栈深度则抛出StackOutflowError 如果在动态扩展时,无法申请到足够的内存则抛出OutOfMemoryError 单线程:无论是栈空间太大,还是虚拟机内存太小,抛出的都是StackOutflowError 多线程:抛出OutOfMemoryError 局部变量表:是一组变量值存储空间