运行时的区域
Java虚拟机在执行Java程序的过程中,会把它管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途和创建销毁时间。
程序计数器
线程私有,当前线程所执行的字节码行号指示器。唯一不会发生OOM的区域。
Java虚拟机栈
线程私有,存储局部变量表,操作数栈,动态链接,方法出口等信息。
本地方法栈
线程私有,为虚拟机使用到的Native方法服务。
堆
线程共享,存放对象实例。
方法区
线程共享,存储类信息,常量,静态变量。
OOM常见原因
-
内存空间分配过小
-
代码bug导致内存泄漏
OOM解决方法
-
分配合理的内存空间
-
避免代码bug,比如一次性取出太多数据,或循环创建对象
如果觉得有帮助,就请点个赞鼓励一下吧。