Java 垃圾回收 (未完成)

来源:互联网 发布:公安机关优化发展环境 编辑:程序博客网 时间:2024/06/05 19:45

垃圾回收

早就知道java会垃圾回收了,但是对其中道理一点都不了解,我想成为大神,还是必须要多懂一些,多会一些,多写一些吧;

垃圾回收的算法和思想

  1. 引用计数法
    这个相当于计数,因为java每个变量的名字实际上是一种引用,我们可以给一个对象很多引用,那么同时,当对象没有引用的时候,说明这个对象没有用了,可以扔掉了;
    ps:对象都没有引用了,说明这块地址,这个对象,程序已经使用不了,那就赶紧清理呗
  2. tracing算法 追踪算法
    当我们通过计数这种方式,进行垃圾清理,我们会多出很多操作,每次都要加减,还要存储计数;那么可不可以不要这么麻烦呢,追踪算法,顾名思义,追踪,通过所有引用追踪对象,如果对象存在,将其标记;追踪结束后,回收那些没有标记的对象;
  3. compacting算法
    对于一个对象,我们怎么知道他是不是活着呢?我们可以移动它呀。于是我们可以把对象移动至堆得一侧,那么另一侧就是不可操作的对象了;
  4. copying算法
    上面说移到另一侧,这个呢直接就有好多堆,从这里移到哪里,然后清理旧的
    5.generation算法
    简单来说,应该是说分堆,分代,新生成的对象,放在新代中,执行清理,存活的对象扔到旧代中;
    就像是你现在混黑社会,外圈是要淘汰的,比如说一分钟淘汰一次,滤掉的就是不合格的,剩下的升级;升级后清理密度变低,这样就节省了时间;

稍微深度一下:

我们在子函数建立一个对象a,当子函数运行完成时,返回时?这个a还存在吗?

对象存不存在不一定,a一定不存在了,首先a是一个引用,他的作用于只在子函数运行时,函数结束,他就不存在了;但是这个对象存不存在就要看垃圾回收何时进行了;

0 0
原创粉丝点击