java内存区域的分布
2017-06-19 21:51
288 查看
在阅读《深入理解JVM》时,发现这一块内容还是值得简单的记一下的,它会帮助我们定位java异常出错的区域。
对JVM不想太多了解的,知道下面这些就足够了。
java内存区域说明
1.java堆溢出会提示:OutOfMemoryError: Java heap space
2.虚拟机栈和本地方法栈的栈溢出:StackOverflowError
虚拟机栈和本地方法栈的内存溢出:OutOfMemoryError: ... ... in native(XX) thread
3.方法区和运行时常量池溢出:OutOfMemoryError: PermGen space (汉语:永久代空间)
4.直接内存溢出:OutOfMemoryError后没有任何空间提示信息,可以考虑从NIO方向入手
知道java的内存区域分布之后,了解异常信息的提示可以满足java两年工作经验之内的人使用要求。
对JVM不想太多了解的,知道下面这些就足够了。
区域名称 | 内容 | 作用 | 异常提示 |
程序计数器 | 可看作当前线程的字节码行号指示器,每个线程是独立的 | 改变计数器值选取下一条需要执行的字节码 | 没有任何内存错误提示 |
java虚拟机栈 | java方法执行的内存模型,线程私有 | 保存局部变量表 | 请求栈深度超限抛出StackOverflowError;变长栈扩展无法获得足够空间时,抛出OutOfMemoryError |
本地方法栈 | Native方法执行的内存模型,线程私有 | 保存局部变量表 | 异常类似java虚拟机栈的异常提示 |
java堆 | 存放对象实例,为线程共享 | 保存对象实例,GC的主要工作区域 | 由于是动态扩展的区域,内存不足会抛出OutOfMemoryError |
方法区 | 为线程共享,存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等 | 保存类信息、常量信息 | 当无法分配内存时,抛出OutOfMemoryError |
运行时常量池 | 它是方法区的一部分, | 除方法区的信息外,还有常量池保存的编译器生成的各种字面量和符号引用等 | 当无法分配内存时,抛出OutOfMemoryError |
直接内存 | 不是JVM运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,,也会被使用的内存区域 | 跟NIO有极大的关联 | 频繁使用也可能导致抛出OutOfMemoryError |
2.虚拟机栈和本地方法栈的栈溢出:StackOverflowError
虚拟机栈和本地方法栈的内存溢出:OutOfMemoryError: ... ... in native(XX) thread
3.方法区和运行时常量池溢出:OutOfMemoryError: PermGen space (汉语:永久代空间)
4.直接内存溢出:OutOfMemoryError后没有任何空间提示信息,可以考虑从NIO方向入手
知道java的内存区域分布之后,了解异常信息的提示可以满足java两年工作经验之内的人使用要求。
相关文章推荐
- Java内存区域分布
- JAVA内存区域分布图
- Java运行时内存数据区域分布
- Java运行时内存数据区域分布
- java内存区域与内存溢出异常
- JVM内存管理:深入Java内存区域与OOM、深入垃圾收集器与内存分配策略
- Java 内存区域和GC机制
- TCC89x的内存分布区域设置
- JVM内存管理:深入Java内存区域与OOM
- java内存分布
- java内存分布
- JVM内存管理:深入Java内存区域与OOM
- (转)JVM内存管理:深入Java内存区域与OOM
- Java查漏系列(2)——java内存区域
- 堆与栈的解析-以数组为例,解析数组在内存中的分布(JAVA基础-课堂笔记)
- JVM内存管理:深入Java内存区域与OOM、深入垃圾收集器与内存分配策略
- JVM内存管理:深入Java内存区域与OOM
- java内存分布
- JVM内存管理:深入Java内存区域与OOM
- 《深入理解Java虚拟机》学习笔记一:Java内存区域