java弱引用和软引用,java 软引用和弱引用的作用
如何解决写爬虫IP受阻的问题?立即使用。
在Java中,当一个对象被创建时,它被放在内存堆中。当GC运行时,如果发现没有对该对象的引用,该对象将被回收以腾出内存空间。
或者换句话说, 一个对象被回收, 必须满足两个条件:
1)没有参考(推荐学习:java课程)
2)GC正在运行。
对于java的简单情况,手动置空不需要程序员来做,因为在Java中,对于一个简单的对象,当调用它的方法结束时,对它的引用就会被GC回收。
实际上,当我们编写代码时,往往是通过将所有指向一个对象的referece设置为null来实现的,比如:
人p=新人(张三,18,男);//strong引用
.
p=null//不用的时候设置null很明显。手动设置空对象是乏味的,并且违背了程序员的自动回收机制。
对于Java的简单情况,比如方法中生成的局部对象,程序员没必要手动清空。当调用它的方法完成时,对它的引用将被GC回收。
在更复杂的情况下,比如使用cache,因为cache的对象正是程序需要运行的对象,所以只要程序在运行,cache中的引用就不会被GC。然后随着缓存中引用越来越多,GC无法回收的对象也越来越多,而且无法自动回收。这时候开发者必须处理回收,这显然违背了java的自动回收机制。
对此,java中引入了弱引用(WeakReference)。
当一个对象只被弱引用指向,而没有被任何其他强引用指向时,如果GC运行,该对象将被回收。如果有与之关联的强引用,则在垃圾回收期间不会回收该对象。
WeakReference的语法:
WeakReferenceT weak reference=new WeakReferenceT(referent);当你想得到弱引用所引用的对象时,首先需要判断它是否已经被回收:
weak reference . get();如果此方法为空,则weakReference指向的对象已被回收。
下面一个WeakReference的栗子:
Person类:
包com . yx . test . model;
/**
*人
*
* @作者yx
* @日期2019/11/26 16:28
*/
公共类人员{
私有字符串名称;
私人年龄;
私弦性;
公共人物(){
}
公众人物(字符串名称、年龄、性别){
this.name=name
this.age=年龄;
this.sex=sex
}
公共字符串getName() {
返回名称;
}
public void setName(字符串名){
this.name=name
}
public int getAge() {
回归年龄;
}
公共无效存储(整数){
this.age=年龄;
}
公共字符串getSex() {
回报性;
}
public void setSex(String sex) {
this.sex=sex
}
}测试类TestWeakReference:
包com . yx . test . reference;
导入com . yx . test . model . person;
导入Java . lang . ref . weak reference;
/**
* TestWeakReference
*
* @作者yx
* @日期2019/11/26 16:30
*/
公共类TestWeakReference {
公共静态void main(String[] args) {
人p=新人(张三,18,男);
WeakReferencePerson weakPerson=新WeakReferencePerson(p);
int I=0;
while(true){
if(weakPerson.get()!=null){
我;
system . out . println( I 循环的对象是活动的- weak person);
}否则{
System.out.println(对象已被收集。);
打破;
}
}
}
}运行结果:
p对1个循环有效-Java . lang . ref . weak reference @ 330 bed B4
.
p对62331个循环有效-Java . lang . ref . weak reference @ 330 bed B4
p对62332个循环有效-Java . lang . ref . weak reference @ 330 bed B4
p已收藏。可以看到,while循环执行了上万次后,P被回收了。
经过多次测试运行程序,发现P回收时循环执行的次数是不确定的,这很好理解:因为是由GC运行的不确定性决定的。
小结:
1.Java当一个对象仅被弱引用引用时,如果GC运行,该对象将被回收。
2.弱引用的一个特点是不确定何时回收;以上是java弱引用的理解和使用细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。