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

内存结构

  • 1.1 结构图
  • 1.2 内存区说明
    • 虚拟机栈
    • 本地方法栈
    • 程序计数器
    • 方法区
    • 直接内存
  • 1.3 内存出错分析

1.1 结构图

JAVA虚拟机学习笔记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(方法区内存溢出)
方法区内存溢出。

你可能感兴趣的:(JVM(java虚拟机))