jvm里的内存溢出

目录

堆溢出

虚拟机栈和本地方法栈溢出(栈溢出很少出现)

方法区和运行时常量池溢出

本机内存直接溢出(实际中很少出现、了解即可)


堆溢出

堆溢出:最常见的是大list,list里面有很多元

堆溢出该怎么解决

定位到导致内存溢出的对象

判断是否是真的内存溢出,先判断这个对象是不是正常的,如果不是,就得修复,如果是:要么去调优,通过优化逻辑来减少对象的大小;如果说硬件设施~(操作系统)剩余内存还足够大,就可以将堆内存调大一些。

虚拟机栈和本地方法栈溢出(栈溢出很少出现)

虚拟即栈放的是java方法,本地方法栈放的是本地native方法

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常;如果虚拟机的栈内存允许动态扩展,当扩展栈容量无法申请到足够的内存时,将抛出OutOfMemoryError异常。

方法区和运行时常量池溢出

String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用;否则,会将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。

str3直接在字符串常量池中创建字符串,str4 new在堆里

true true false false

原因:append之后可能为之前已经有的内存地址,ja和va拼接起来后的java之前在常量池中已经有了true true false false

原因:append之后可能为之前已经有的内存地址,ja和va拼接起来后的java之前在常量池中已经有了

断点查看字符串在常量池中的地址

本机内存直接溢出(实际中很少出现、了解即可)

直接内存(Direct Memory)的容量大小可通过-XX:MaxDirectMemorySize参数来指定,如果不去指定,则默认与Java堆最大值(由-Xmx指定)一致

相关推荐
Luo_LA6 小时前
【Java 面试 八股文】JVM 虚拟机篇
java·jvm·面试
二十七剑10 小时前
jvm调试和查看工具
java·linux·jvm
李长渊哦1 天前
常用的 JVM 参数:配置与优化指南
java·jvm
数巨小码人1 天前
QT SQL框架及QSqlDatabase类
jvm·sql·qt
martian6651 天前
【Java高级篇】——第16篇:高性能Java应用优化与调优
java·开发语言·jvm
李长渊哦2 天前
Java 虚拟机(JVM)方法区详解
java·开发语言·jvm
二十七剑2 天前
jvm中各个参数的理解
java·jvm
七禾页话2 天前
垃圾回收知识点
java·开发语言·jvm
小梁不秃捏3 天前
深入浅出Java虚拟机(JVM)核心原理
java·开发语言·jvm
xiaolingting3 天前
JVM层面的JAVA类和实例(Klass-OOP)
java·jvm·oop·klass·instanceklass·class对象