可用内存的情况下显示内存溢出?
JVM中的内存和计算机的内存不是一回事,JVM(JAVA虚拟机)只是运行在服务器中的一个进程,只占用一部分的内存,其中堆通常占了整个jvm内存的80%!
假设一下,计算机是8G内存只给jvm分配了4G内存,jvm占用了4G内存之后,虽然整个内存才使用50%(忽略其他的),jvm也将发生内存溢出!
jvm内存溢出有哪些可能情况呢?
①,堆溢出:堆用来存储实例对象!
可能原因一:设置的最大堆内存太小!解决方案:通过设置-Xmx调大最大堆内存!
可能原因二:循环创建对象导致对象来不及回收!解决方案:优化代码!
②,栈溢出:栈主要用来存放对象引用!
可能原因:递归调用方法等容易出现栈溢出!
解决方法:优化代码!
③,方法区溢出:通常是因为加载了大量的Class,jar等!
通常不会溢出,使用-XX:Permsize设置合适的永久代!
发现内存溢出之后,可使用jstamp,MAT JAVA等进行内存分析
一直在持续分享JAVA方面的技术,有需要的朋友敬请关注。。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有