博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java内存区域的分布
阅读量:4039 次
发布时间:2019-05-24

本文共 944 字,大约阅读时间需要 3 分钟。

在阅读《深入理解JVM》时,发现这一块内容还是值得简单的记一下的,它会帮助我们定位java异常出错的区域。

对JVM不想太多了解的,知道下面这些就足够了。

java内存区域说明
区域名称 内容 作用 异常提示
程序计数器 可看作当前线程的字节码行号指示器,每个线程是独立的 改变计数器值选取下一条需要执行的字节码 没有任何内存错误提示
java虚拟机栈 java方法执行的内存模型,线程私有 保存局部变量表 请求栈深度超限抛出StackOverflowError;变长栈扩展无法获得足够空间时,抛出OutOfMemoryError
本地方法栈 Native方法执行的内存模型,线程私有 保存局部变量表 异常类似java虚拟机栈的异常提示
java堆 存放对象实例,为线程共享 保存对象实例,GC的主要工作区域 由于是动态扩展的区域,内存不足会抛出OutOfMemoryError
方法区 为线程共享,存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等 保存类信息、常量信息 当无法分配内存时,抛出OutOfMemoryError
运行时常量池 它是方法区的一部分, 除方法区的信息外,还有常量池保存的编译器生成的各种字面量和符号引用等 当无法分配内存时,抛出OutOfMemoryError
直接内存 不是JVM运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,,也会被使用的内存区域 跟NIO有极大的关联 频繁使用也可能导致抛出OutOfMemoryError

1.java堆溢出会提示:OutOfMemoryError: Java heap space

2.虚拟机栈和本地方法栈的栈溢出:StackOverflowError

   虚拟机栈和本地方法栈的内存溢出:OutOfMemoryError: ... ... in native(XX) thread

3.方法区和运行时常量池溢出:OutOfMemoryError: PermGen space (汉语:永久代空间)

4.直接内存溢出:OutOfMemoryError后没有任何空间提示信息,可以考虑从NIO方向入手

知道java的内存区域分布之后,了解异常信息的提示可以满足java两年工作经验之内的人使用要求。

转载地址:http://zzvdi.baihongyu.com/

你可能感兴趣的文章
关于进制转换的具体实现代码
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
Oracle Database 12c 新特性:RAC Cluster Hub Node 和 Leaf Node
查看>>
Understanding Oracle Flex Clusters
查看>>
Oracle 12.2.0.1 新增的与Oracle数据库性能相关的功能
查看>>
Oracle 12C R2-新特性-多租户:支持本地UNDO模式
查看>>
oracle hanganalyze和systemstate使用测试
查看>>
Oracle Database 12c第2版(12.2)中的自动列表分区
查看>>
Oracle Database 12c第2版(12.2)中的只读分区和子分区
查看>>
12.2: ORA-28040 Followed by ORA-1017 When Client is Under Version 12
查看>>
ORA-01031 TOAD 连接到12c数据库
查看>>
Docker-利用Dockerfile来搭建tomcat服务
查看>>