java 内存区域

根据 java虚拟机规范 的规定,java虚拟机所管理的内存会包括以下几个运行时数据区域:堆,方法区,程序计数器,虚拟机栈,本地方法栈

程序计数器:当前线程所执行的字节码的行号,程序执行时根据行号获取下一条指令(通俗的讲,就是指令执行到什么位置)

因为java虚拟机多线程是CPU切换时间片执行,因此每个线程拥有自己的程序计数器,各个线程的程序计数器相互独立,这样在切换时间片执行相应线程时才能根据

自身的程序计数器恢复到正常状态,继续执行

java虚拟机栈:线程私有,生命周期与线程相同,主要作用是保存方法执行时的局部变量,所需内存大小在编译期间分配

本地方法栈:执行本地方法时保存本地方法产生的局部变量的内存(与java虚拟机栈的区别为:java虚拟机栈 是执行java方法时保存临时变量的空间)

当栈的深度超过虚拟机允许的最大深度时StackOverflowError(递归次数过多可能会产生这个问题),当栈空间无法扩展,超过限制时:OOM  OutOfMemoryError

java堆:保存对象实例,数组, 线程共享

方法区:线程共享,存放 虚拟机加载的类信息,常量,静态变量

猜你喜欢

转载自www.cnblogs.com/byebyebird/p/10134549.html