Java中的弱引用究竟是什么性质的数据结构?
- 内容介绍
- 文章标签
- 相关推荐
本文共计926个文字,预计阅读时间需要4分钟。
在Java中,对象obj被创建时,其存储在堆内存中。当垃圾回收器运行时,若发现没有对obj的引用指向,则会回收obj占用的堆内存。一个对象被回收,必须满足以下两个条件:(1)没有对任何的引用;(2)没有对直接的引用。
Java里一个对象obj被创建时,被放在堆里。当GC运行的时候,发现没有任何引用指向obj,那么就会回收obj对象的堆内存空间。
换句话说,一个对象被回收, 必须满足两个条件:
(1)没有任何引用指向它
(2)GC被运行。
在实际开发中,我们可以通过把所有指向某个对象的referece置空来保证这个对象在下次GC运行的时候被回收,类似下面:
Object c = new Car(); c=null;
但是,这样做是一件很繁琐并且违背GC自动回收原则的事。对于简单的情况, 手动置空是不需要程序员来做的, 因为在java中, 对于简单对象, 当调用它的方法执行完毕后, 指向它的引用会被从栈中弹出, 所以它就能在下一次GC执行时被回收了。
本文共计926个文字,预计阅读时间需要4分钟。
在Java中,对象obj被创建时,其存储在堆内存中。当垃圾回收器运行时,若发现没有对obj的引用指向,则会回收obj占用的堆内存。一个对象被回收,必须满足以下两个条件:(1)没有对任何的引用;(2)没有对直接的引用。
Java里一个对象obj被创建时,被放在堆里。当GC运行的时候,发现没有任何引用指向obj,那么就会回收obj对象的堆内存空间。
换句话说,一个对象被回收, 必须满足两个条件:
(1)没有任何引用指向它
(2)GC被运行。
在实际开发中,我们可以通过把所有指向某个对象的referece置空来保证这个对象在下次GC运行的时候被回收,类似下面:
Object c = new Car(); c=null;
但是,这样做是一件很繁琐并且违背GC自动回收原则的事。对于简单的情况, 手动置空是不需要程序员来做的, 因为在java中, 对于简单对象, 当调用它的方法执行完毕后, 指向它的引用会被从栈中弹出, 所以它就能在下一次GC执行时被回收了。

