java中会存在内存泄漏吗,请简单描述?
来源:互联网 发布:针锋相对网络剧百度云 编辑:程序博客网 时间:2024/06/04 23:27
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;
}
public void setA(A a){
this.a=a;
}
//getter...
}
显然B采用singleton模式,他持有一个A对象的引用,而这个A类的对象将不能被回收。想象下如果A是个比较大的对象或者集合类型会发生什么情况。
上面所讲的这些也启发我们如何去查找内存泄露问题,在代码复审的时候关注长生命周期对象:全局性的集合、单例模式的使用、类的static变量等等。在Java的实现过程中,也要考虑其对象释放,最好的方法是在不使用某对象时,显式地将此对象赋空。最好遵循谁创建谁释放的原则。
- java中会存在内存泄漏吗,请简单描述
- java中会存在内存泄漏吗,请简单描述。
- java中会存在内存泄漏吗,请简单描述
- java中会存在内存泄漏吗,请简单描述。
- java中会存在内存泄漏吗,请简单描述。
- java中会存在内存泄漏吗,请简单描述。
- java中会存在内存泄漏吗,请简单描述?
- java中会存在内存泄漏吗,请简单描述?
- java中会存在内存泄漏吗,请简单描述。
- java中会存在内存泄漏吗,请简单描述。
- java基础问题----java中会存在内存泄漏吗,请简单描述
- Java中会存在内存泄露吗,请简单描述。
- java中会存在内存泄漏吗
- java中会存在内存泄漏吗
- java中会存在内存泄漏吗?
- java中会存在内存泄漏吗
- Java中会存在内存泄漏吗
- Java中会存在内存泄漏吗
- VB.NET WPF TextBox与类对象绑定
- CentOS SSH公钥登录问题
- 2.NSstring
- 2015062506 - jdk7.8源码下载地址
- IOS关于异步请求学习
- java中会存在内存泄漏吗,请简单描述?
- 以不规则图片为边框,切割另外的图片
- Android同时使用多个library时android-support-v4.jar冲突问题。
- 2015062507 - apache的扩展包下载地址
- 黑马程序员——I/O流(二)
- poj 1179 Polygon
- Servlet 3.0的AsyncListener接口
- 2015062508 - apache工具类说明
- java重载和重写