java虚拟机管理的内存区域
java虚拟机栈
这就是我们平时所说的栈,线程私有,每个方法方法执行开始会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法的返回地址等信息。
本地方法栈
本地方法栈调用的是native方法,同样也可能会oom
程序计数器
线程私有,记录当前线程执行的行号。如果线程执行的是java方法,则程序计数器记录虚拟机字节码指令的地址。如果为本地native方法,那么计数器为空。
方法区
方法区存放的是所有线程共享的已被虚拟机加载的类信息,常量和静态变量。
堆
堆是jvm管理的内存区域中最大的一块。java中所有对象的实例和数组的内存分配都在堆上。堆上分配的对象是线程共享的,所有多线程在堆共享对象上需要相应的同步机制,同时也是GC垃圾收集所管理的区域。