java 内存区域

Posted byebyebird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 内存区域相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

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

 

以上是关于java 内存区域的主要内容,如果未能解决你的问题,请参考以下文章

Java内存区域与内存溢出异常

Java内存区域

java虚拟机java内存区域与内存溢出异常

java内存模型,内存区域

Java内存区域与模拟内存区域异常

Java内存区域与内存溢出异常