JAVA虚拟机学习笔记1-内存结构

1.1 结构图

在这里插入图片描述

1.2 内存区说明

虚拟机栈

线程私有的,保存局部变量表、操作数栈、动态链接、方法出入口等信息。通过Xss设置大小。

本地方法栈

线程私有的,与虚拟机栈类似功能,不过用于保存native方法服务。通过Xss设置大小。

程序计数器

线程私有的,由于当前线程执行的行号指示器。

方法区

所有线程共享的,包括类信息、常量、静态变量等数据。通过-XX:PermSize和-XX:MaxPermSize来设置方法区内存大小。

所有线程共享的,主要用于存放对象实例。一般的GC都是回收此内存。通过-Xmx和-Xms控制其堆的内存大小。

直接内存

并非虚拟机的内存一部分,只是堆外的内存。比如NIO等就是使用这个内存缓存。通过-XX:MaxDirectMemorySize设置。如果不设置,默认与-Xmx大小一样。这部分跑出OutOfMemory后,dump文件里面可以看出内存正常,并没有体现在dump文件里面。

1.3 内存出错分析

OutOfMemory:Java heap space(堆的溢出)
主要是内存溢出异常,是堆的溢出。通过内存工具分析dump文件。有可能是内存泄漏,也有可能是内存溢出,根据实际情况分析解决。
StackOverflowError(虚拟机栈和本地方法栈溢出)
栈溢出,说明虚拟机栈或者本地栈溢出。
OutOfMemory:unable to create new native thread
栈内存溢出,说明虚拟机栈或者本地栈内存溢出。
OutOfMemory:PermGen space(方法区内存溢出)
方法区内存溢出。

猜你喜欢

转载自blog.csdn.net/linwu_2006_2006/article/details/94738237
今日推荐