内存溢出和内存泄漏是两个不同的问题,但是他们都是和堆有着密切的关系。
主要说下JVM内存结构以及怎么使用方案。
内存溢出?常见的内存溢出?内存溢出的解决方案
内存溢出:
当你申请2个字节的时候,如果使用Int类型,占用4个字节,这种情况会出现内存溢出
可能出现内存溢出的原因:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小
内存溢出的解决方案:
第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)
第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。(查看下报错日志)
第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。(Debug)
第四步,使用内存查看工具动态查看内存使用情况(可自行百度)
内存泄漏
项目中定义太多被static修饰过的变量,但是这些变量都是在永久区的,不一定能够被GC定期回收,随着堆积,下次在申请内存的时候就会出现内存泄漏。
小编给大家的建议
大家在开发中,一定不要定义太多的变量,因为被static修饰过的变量都是存在永久区的,具体可以了解下 JVM内存结构在实战中学习,在快乐中成长