java中是否会存在内存泄漏

如题所述

会。java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。
1.集合类,集合类仅仅有添加元素的方法,而没有相应的删除机制,导致内存被占用。这一点其实也不明确,这个集合类如果仅仅是局部变量,根本不会造成内存泄露,在方法栈退出后就没有引用了会被jvm正常回收。而如果这个集合类是全局性的变量(比如类中的静态属性,全局性的map等即有静态引用或final一直指向它),那么没有相应的删除机制,很可能导致集合所占用的内存只增不减,因此提供这样的删除机制或者定期清除策略非常必要。
2.单例模式。不正确使用单例模式是引起内存泄露的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露,考虑下面的例子:class A{
public A(){
B.getInstance().setA(this);}
....}
//B类采用单例模式class B{
private A a;
private static B instance=new B();
public B(){}
public static B getInstance(){
return instance;}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-28
1、Java中有自回收垃圾机制GC 2、有些连接比如数据库、IO流等要进行手动.close()方法进行关闭,达到内存操作 其中: 垃圾回收机制GC其实就是设置一个根节点,然后在这个程序中,判断变量或者对象是否还属于这个根节点,如果不属于了,则判断为垃本回答被网友采纳
相似回答