关于java内存泄漏的一点学习心得

关于内存泄露的概念(官方解释):
内存泄漏也称作”存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。即所谓内存泄漏。

有一句大白话讲就是:内存空间使用完毕之后未回收。
有关内存泄露的更多介绍:http://baike.baidu.com/link?url=6xg8iUiQRsT1aOMX0W6HuAJzwxRYX46t5U-ci6r5svkN-Jv_i3auL6WCt_GuyBZcip5hu6SIF56qW1d4Hgi7wshF_5sxeQONzmuPO3yR0KRWAuqjgNhJCSxCL3tRHN3U

java语言本身具备垃圾回收机制,这使得java程序员在写代码的过程中不用考虑内存释放问题,这使得java程序员在写代码的过程中变得更加的简单。但从JVM的角度来讲的话,因为GC的存在,JVM要不间断的监控内存中对象的状态,这加重了JVM的负担,这也是导致java程序效率相对较低的原因之一。

既然java有垃圾回收机制,那么java到底存不存在内存泄露的问题呢?

以下是小编学习了一些前辈高手的心得后,得到的一些认识:

Vector v = new Vector(10);  
for(int i=0;i<10;i++){
    Object o = new Object();
    v.add(o);
    o = null;  //使对象的引用为空
}

在以上代码中,首先创建了一个存放Vector容器,然后在for语句中循环往容器内部放入对象,并且在每一次循环结束时让创建对象时的引用变量指向为null,但因为这些创建对象放入到了Vector容器中,而v指向该容器,所以这些对象依然可以在堆内存中存在,并不会被GC自动回收。如果在需要使用这些对象的时候也是可以通过Vector类提供的功能来获取并使用的,获取代码如下:

Object o = v.get(0); //获取v容器内位于索引 0处的项

所以小编的理解是:
若存放在Vector容器里的这些对象在以后的程序中不会被使用到,那么从实际的意义上来讲可以认为是一种“内存泄露”,因为这些对象无谓的占用了内存空间;而从java语言的规则上讲,这些对象是可以在堆内存中存在的,并且在需要使用时也可以得到这些对象,所以从这个角度讲,或许并不能称为“内存泄露”。

参考博文Java的内存泄漏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值