首页 > 代码库 > Java内存区域与内存溢出异常
Java内存区域与内存溢出异常
Java 所管理的运行时区域(5个):
程序计数器:(当前的线程字节码执行到哪了,该执行哪条字节码了,指向字节码的行号)
可以看做当前线程所执行字节码的行号,也就是用来标识当前线程执行的字节码的具体位置。字节码解释器工作时就是通过改变程序计数器来选取下一条要执行的字节码指令。
是线程私有的,分支、循环、线程切换、跳转等都需要依赖它。
Java虚拟机栈:(和方法执行有关的信息,是栈)
线程私有;
每一个方法执行时都会创建一个栈帧,用来存储和方法执行有关的信息,包括局部变量表、操作数栈、方法出口等信息。
那么每一个方法的执行对应着帧入栈,方法结束对应着帧出栈。
本地方法栈:
该栈为虚拟机使用Native方法服务(java调用非java代码)
Java堆:(存放对象)
线程共享;
唯一目的存放对象实例;
是java虚拟机管理的运行时区域中最大的一块。
方法区:
各个线程共享的区域;
用于存储类信息、常量、静态变量等信息;
运行时常量池:是方法区的一部分 ,保存Class文件中描述的符号引用以及 翻译出来的直接引用。
直接内存:
使用native 方法引入对本地内存的使用,不会受到java堆大小的限制。
OutOfMemoryError
除了程序计数器外,其他堆或者区域在无法申请到所需内存时,均会抛出该异常、
Java内存区域与内存溢出异常