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指定)一致

相关推荐
流星5211221 天前
GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
java·jvm·笔记·学习·算法
JanelSirry1 天前
我的应用 Full GC 频繁,怎么优化?
jvm
JH30731 天前
jvm,tomcat,spring的bean容器,三者的关系
jvm·spring·tomcat
DKPT1 天前
JVM直接内存和堆内存比例如何设置?
java·jvm·笔记·学习·spring
siriuuus1 天前
JVM 垃圾收集器相关知识总结
java·jvm
小满、1 天前
什么是栈?深入理解 JVM 中的栈结构
java·jvm·1024程序员节
百花~2 天前
JVM(Java虚拟机)~
java·开发语言·jvm
每天进步一点点dlb2 天前
JVM中的垃圾回收算法和垃圾回收器
jvm·算法
漫漫不慢.2 天前
蓝桥杯-16955 岁月流转
java·jvm·蓝桥杯
boy快快长大3 天前
【JVM】线上JVM堆内存报警,占用超90%
jvm