Java内存泄漏与内存溢出

Java内存泄漏原因:

1.静态集合类,例如HashMap和Vector。这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。

2.各种连接,如数据库连接、网络连接及IO连接,使用过后未显式关闭,造成大量对象无法被回收。

3.监听器。在释放对象的时候却没有删除监听器,从而增加了内存泄漏的机会。

4.变量不合理的作用域。

5.单例模式。不正确使用单例模式,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露,


Java内存溢出原因:


引起内存溢出的原因有很多种,常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小
内存溢出的解决方案:
第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)
第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。
第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

你可能感兴趣的:(面试题)