JVM内存及内存溢出异常(个人总结)

JVM内存溢出异常

    想了解Java虚拟机内存溢出异常就要先明白JVM内存有那些,它们都有什么作用,这样我们才能更加深入的理解内存溢出是怎么回事。
在JAVA虚拟机内存中运行时内存区域除了PC(程序计数器)不会发生OutOfMemoryError异常,其他几个区域[{线程共享区域:方法区、堆},{线程私有区:本地方法栈、程序计数器、虚拟机栈}]。
线程共享区域中----------------
-----------方法区:
它用于存放已经被虚拟机加载的类信息、常量和JIT编译器编译后的代码等数据。这个区域的内存回收目标是针对常量池的回收和类型的卸载。(运行时常量池-------Class文件中除了包括类的版本、字段、方法、接口等描述信息以外,还有一项信息是常量池信息,其中包括编译器生成的各种字面量和符号引用,在类被加载的时候就存到了方法区的运行时常量池中)。
-----------堆:
对大多数应用来说堆是内存管理中最大的一块,它主要存放对象实例信息。它随着虚拟机的启动而产生,是垃圾回收管理的主要区域。
线程私有区域-------------------
----------虚拟机栈:
它的生命周期和线程相同。虚拟机栈描述的是 JAVA方法执行的内存模型:每个方法执行的时候都会创建一个栈帧来存储局部变量表、操作数栈、动态链接、方法出口。每个方法调用直到执行完成的过程,都对应着栈帧在虚拟机中入栈到出栈的过程。
----------本地方法栈
本地方法栈和虚拟机栈发挥的作用是非常相似的,虚拟机栈为虚拟机执行JAVA方法服务,而本地方法栈是为虚拟机使用到Native的方法服务。
----------程序计数器
程序计数器是内存区域中较小的一块区域,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变计数器的值来选取下一条所需要执行的字节指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

JVM内存溢出异常:
StackOverFlowError:
每当JAVA程序启动一个新线程时,JAVA虚拟机会为它分配一个JAVA栈

你可能感兴趣的:(JAVA,Bacis,Content)