java垃圾回收机制与内存泄漏

 java垃圾回收机制:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

  • 栈:在内存中开辟空间用于存储对象。
  • 堆:在内存中开辟空间用于存储数据。
  • 指向:栈空间中的对象与堆空间的数据存在的一种引用关系。

示例:

    public Object finalize(){
         Object num=new Integer(0);
         //在此实际创建了两个对象,num对象与Integer对象,此时num指向堆空间中的数据0,Integer对象    
          创建完成后被垃圾回收机制回收。
         Object []  ob=new Object [1];
         ob[0]=num;
         //让ob同样指向0,此时num与ob同时指向0。
         num=null;
         num1[0]=null;
         return 0;
    }

    当代码运行至第5行时JVM将自动启动垃圾回收机制,此时堆内存中的数据0在栈内存中没有任何引用。由此我们可以得出,当JVM监听到堆内存中的数据无任何引用时会自动启动垃圾回收机制。

 

  • 内存泄露:程序在运行过程中,当堆内存中的数据一直运行不能被正确回收时称为内存泄露。

示例:

    public Object finalize(){
         Object  num=new Integer(0);
         Object[] ob=new Object [1];
         num=null;
         ob[0]=num;
     }

     上面这段代码将会发生内存泄露。首先程序在内存中开辟出num与ob的栈内存空间,并同时指向堆内存中的数据0,当代码执行至第4行时num被清空,在此之前ob对象并没有任何指向,当num对象被设置为null时,堆内存空间中的数据0此时应该被垃圾回收机制回收,但是当代码执行至第5行时,num对象被赋值给ob对象,这将导致num申请的内存空间不能被释放。如有不对,欢迎批评指正。

  • 如何避免内存泄露:
  1. 在使用具有存储功能的集合,到程序结束时需将存储容器设置为null。
  2. 数据库连接、数据流读取时记得关闭连接。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值