java中是否存在内存泄漏?什么情况下才是内存泄漏?

        内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,
在java中有垃圾回收器(GC),当对象不再被引用的时候,垃圾回收器会自动将没有被引用的对象进
行销毁。
        但是在java中依旧会出现内存泄漏的问题,第一种情况,当生命周期较长的对象引用短生命周期对
象的就很可能发生内存泄露,当短生命周期的对象已经不被需要的时候 ,但是长生命周期的对象应用的
缘故,短生命周期的对象一直无法被释放,所以当短生命周期的对象在不被使用的时候依然无法从堆内
存中被释放出来,无法被GC所回收,占用资源,导致内存泄漏。所以在Java中虽然存在垃圾回收机制。
但是依旧避免不``了你内存泄漏的发生。例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一
个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。
        如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,
即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被
垃圾回收,这也会

public class Stack { 
	private Object[] elements=new Object[10]; 
	private int size = 0; 
	public void push(Object e){ 
		ensureCapacity(); 
		elements[size++] = e; 
	} 
	public Object pop(){ 
		if( size == 0) 
		throw new EmptyStackException(); 
		return elements[–size]; 
	} 
	private void ensureCapacity(){ 
		if(elements.length == size){ 
		Object[] oldElements = elements; 
		elements = new Object[2 * elements.length+1]; 
		System.arraycopy(oldElements,0, elements, 0, size); 
		} 
	} 
}`

造成内存泄露。`

        内存泄露的另外一种情况:当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那
些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不
同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对
象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。
        检查java中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是
否被使用过,如果没有,则才能判定这个对象属于内存泄露。
    

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值