Python 官方文档:入门教程 => 点击学习
目录堆内存溢出原因:解决方案:栈内存溢出原因:解决方案:方法区和运行时常量池内存溢出原因:本机直接内存溢出原因:解决方案:元空间内存溢出原因:解决方案:内存溢出的异常有很多,并且每种
内存溢出的异常有很多,并且每种内存溢出都会有不同的异常信息和解决方式,下面会列出常见的几种内存溢出异常
java.lang.OutOfMemoryError: Java heap space
JAVA_OPTS="-server -Xms1024m -Xmx1024m"
表示将堆内存的初始值和最大值都设置为1024m
-Xms设置堆内存的初始值
-Xmx设置堆内存的最大值
-Xms和-Xmx最好设置相同的内存大小,可以防止因为JVM频繁进行内存的调整影响稳定性和使用
通过JVM参数:-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出的时候Dump出当前的堆内存快照,便于保留快照分析
java.lang.outOfMemoryError:StackOverFlow Error
默认的-Xss参数的大小应该是1M
栈内存是线程私有的,如果需要创建更多的线程,那么就需要将每个线程的栈内存空间减小,通过-Xss参数设置每个线程的栈内存空间
配置参数: JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"
jdk8如果没有配置-Xss默认大小为512k
-Xss 设置每个线程的堆栈大小,一般默认512~1024kb,和jdk版本有关
java.lang.outOfMemoryError: PermGen space
解决方案:
运行时常量池是方法区的一部分,所以增加方法区的内存大小,相当于间接的增加了运行时常量池的内存大小
Direct buffer memory
Java 允许应用程序通过 DirectByteBuffer 直接访问堆外内存,许多高性能程序通过 DirectByteBuffer 结合内存映射文件(Memory Mapped File)实现高速 io
DirectByteBuffer 的默认大小为 64 MB,一旦使用超出限制,就会抛出 Direct buffer memory 错误。使用NIO则可能会出现该异常
DirectMemory的内存大小可以通过-XX:MaxDirectMemorySize指定,如果没有设置,则默认和Java堆最大值(-Xmx)一样
Metaspace
Jdk8 之后使用元空间(metaspace)代替永久代,元空间和永久代最大的区别是元空间的内存使用的是本地内存,而永久代使用的是JVM的内存
永久代、元空间都是方法区的实现,方法区是规范
元空间中存储的是类信息、常量池、方法描述等信息,直接使用本地内存,当本地内存不足的时候,会抛出OutOfMemoryError:Metaspace异常
虽然元空间的内存不是由JVM控制,不过可以通过JVM参数来设置分配的内存空间的大小-XX:MaxMetaspaceSize配置参数
以上就是Java 常见的几种内存溢出异常及解决的详细内容,更多关于Java 内存溢出的资料请关注编程网其它相关文章!
--结束END--
本文标题: Java 常见的几种内存溢出异常的原因及解决
本文链接: https://www.lsjlt.com/news/124538.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0