加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

Java的内存回收机制

发布时间:2013-04-01 14:12:24 所属栏目:资讯 来源:站长网
导读:在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内

2)软引用 :通过SoftReference类实现,eg : SoftReference<Person> p = new SoftReference<Person>(new Person("Rain"));,内存非常紧张的时候会被回收,其他时候不会被回收,所以在使用之前要判断是否为null从而判断他是否已经被回收了。

3)弱引用 :通过WeakReference类实现,eg : WeakReference<Person> p = new WeakReference<Person>(new Person("Rain"));不管内存是否足够,系统垃圾回收时必定会回收。

4)虚引用 :不能单独使用,主要是用于追踪对象被垃圾回收的状态。通过PhantomReference类和引用队列ReferenceQueue类联合使用实现,eg :

package test; 

 importjava.lang.ref.PhantomReference;

 importjava.lang.ref.ReferenceQueue;

 public classTest

{

      public static voidmain(String[] args)

   {

          //创建一个对象

          Person person = new Person("Sunny");   

          //创建一个引用队列   

         ReferenceQueue<Person> rq = new ReferenceQueue<Person>();

          //创建一个虚引用,让此虚引用引用到person对象

          PhantomReference<Person> pr = new PhantomReference<Person>(person, rq);

          //切断person引用变量和对象的引用

          person = null;

          //试图取出虚引用所引用的对象

          //发现程序并不能通过虚引用访问被引用对象,所以此处输出为null

  System.out.println(pr.get());

          //强制垃圾回收

  System.gc();

  System.runFinalization();

          //因为一旦虚引用中的对象被回收后,该虚引用就会进入引用队列中

          //所以用队列中最先进入队列中引用与pr进行比较,输出true

  System.out.println(rq.poll() ==pr);

  }

  }

运行结果:

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读