前面的简介:
strongReference:强引用
softReference:软引用。
weakReference:弱引用
phtomReference:虚引用
一:strongReference
String a = new String("hello world");
String b=a;
咯,这里b就是个强引用咯。反正就是会一直指向那个String的。也就是大家最常用的。
二:softReference
String a = new String("hello world");
ReferenceQueue<String> queue = new ReferenceQueue<String>();
SoftReference<String> ref = new SoftReference<String>(a, queue);
这些reference主要的作用就是体现在gc的时候了。softReference的作用是:
写道
当对象是Soft reference可达时,gc可能会向操作系统申请更多内存,而不是直接回收它,当实在没辙了才回收它。像cache系统,最适合用Soft reference。
我的理解就是,GC对Soft reference
还是比较客气的,内存不够的时候才把它干掉,也就是在jvm抛出outOfMemory异常之前,会把这些都给回收掉,以空闲处内存。当内存不足的时候,
这些就会被无情的干掉了。
现在我们来看下它的gc过后的效果。
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
/**
* @author guoliang created TestReferenceMain.java
* @since 2010-5-7 下午06:31:35
*/
public class TestReferenceMain {
/**
* @param args
*/
public static void main(String[] args) {
String a = new String("hello world");
ReferenceQueue<String> queue = new ReferenceQueue<String>();
SoftReference<String> ref = new SoftReference<String>(a, queue);
// WeakReference<String> ref = new WeakReference<String>(a, queue);
// PhantomReference<String> ref = new PhantomReference<String>(a, queue);
a = null;
System.gc();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String value = ref.get();
System.out.println(value);
System.out.println(ref.isEnqueued());
System.out.println(queue.poll());
}
}
输出结果为:
[Full GC 317K->169K(5056K), 0.1891790 secs]
hello world
false
null
可以看出,虽然gc了,但是这个reference还是没有被回收,因为当前的内存还是充足的,大家可以在这里做个例子,
让它outOfMemory再来看看这个reference是否还在,我做过实验,是会没的,oh yeah!~
三:weakReference
String a = new String("hello world");
ReferenceQueue<String> queue = new ReferenceQueue<String>();
WeakReference<String> ref = new WeakReference<String>(a, queue);
写道
Weak reference,简单地说就是这个引用不会强到迫使对象必须保持在内存中。Gc不会碰Strong reference可达的对象,但可以碰weak reference可达的对象。
简单的说:就是gc会蹂躏这种对象,一GC,发现这种对象没人引用了,就把丫的给回收了,不给你机会的。
代码来看看结果.
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
/**
* @author guoliang created TestReferenceMain.java
* @since 2010-5-7 下午06:31:35
*/
public class TestReferenceMain {
/**
* @param args
*/
public static void main(String[] args) {
String a = new String("hello world");
ReferenceQueue<String> queue = new ReferenceQueue<String>();
// SoftReference<String> ref = new SoftReference<String>(a, queue);
WeakReference<String> ref = new WeakReference<String>(a, queue);
// PhantomReference<String> ref = new PhantomReference<String>(a, queue);
a = null;
System.gc();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String value = ref.get();
System.out.println(value);
System.out.println(ref.isEnqueued());
System.out.println(queue.poll());
}
}
输出结果为:
[Full GC 317K->169K(5056K), 0.0074055 secs]
null
true
java.lang.ref.WeakReference@14318bb
可以看到一不引用a,一gc,weakReference对应的就被回收了。
后记:soga,弄完这个感觉还是不错的,以前很少去关注这个。然后就是在eclipse里面调用system.gc还是有用的,想要打出gc的详情可以
在ecliose的run的configure里面的arguments里面加上对应的参数:
- 大小: 14.9 KB
分享到:
相关推荐
学习理解函数加上weak后的变化
本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:) 1....
研究发现:其实与一个人的工作和事业关系最密切的社会关系并不是“强关系”,而常常是“弱关系”。“弱关系”虽然不如“强关系”那样坚固(金字塔),却有着极快的、可能具有低成本和高效能的传播效率。
VSoft.WeakReference 该单元背后的思想是提供与Delphi中引用计数对象类似的生命周期...可以弱引用的类需要从TWeakReferencedObject 。 type TParent = class(TWeakReferencedObject, IParent) ... end; TChild =
博文 ARM 之十一__weak 和 __attribute__((weak)) 关键字的使用 的测试代码,备用!
它使用LRU / LFU(LRFU)到期来保留引用的数据,然后,一旦数据处于非活动状态,它将使用弱引用(和终结注册表)来允许GC作为正常GC周期的一部分删除缓存的数据,但仍然继续只要数据仍驻留在内存中并且尚未被收集,...
关于C++智能指针 weak_ptr (弱引用 智能指针) 和 shared_ptr (强引用 智能指针)的源文件。 资源分不能设为0了。。
压缩包包含了常见的弱口令用户名,弱口令密码。包含常见的服务ftp、telnet、mysql等。还有sql注入测试代码。
weak galerkin finite element meathods on polytopal
weak 属性关键字就是弱引用,它不会增加引用计数但却能保证指针的安全访问,在对象释放后置为 nil,从而避免错误的内存访问。主要为了解决循环引用的问题。 接下来,我们会从 objc 库中的 NSObject.mm、 objc-weak....
国外windows 弱口令检测工具,xTSCrack is a simple RDP Audit tool for Penentration Tester find weak passwords over RDP protocol. xTSCrack support Windows 2000, XP, 2003 and 2008 Terminal Service.
让你轻松掌握weka操作方法,以便进行数据挖掘,这是简单介绍怎么使用这个软件的一个文档
The strength of weak learnability.pdf
可以实现批量扫描ssh、mysql端口弱口令。使用方法: python3 WeakPassScan.py 124行开始,设置一下ip文件位置、用户名位置、密码位置 ippath = r'newOrder57.txt' userpath = r'user_ssh.txt' passpath = r'pass...
Weak References Reference counts and cycles Object properties Accessing multiple properties at once The GObject messaging system Closures C Closures non-C closures (for the fearless). Signals ...
1.通过SideTable找到我们的weak_table; 2.weak_table根据referent找到或者创建...3.然后append_ referent(entry, referent)将我的新弱引用的对象加进去entry; 最后weak_ entry_insert把entry加入到我们的weak_table.
1.通过SideTable找到我们的weak_table; 2.weak_table根据referent找到或者创建...3.然后append_ referent(entry, referent)将我的新弱引用的对象加进去entry; 最后weak_ entry_insert把entry加入到我们的weak_table.
在这本书中,Wee Hyong Tok, Amit Bahree和Senja Filipi向您展示了如何使用弱监督学习模型创建产品。 您将学习如何使用来自Snorkel的弱标记数据集构建自然语言处理和计算机视觉项目,Snorkel是斯坦福人工智能实验室...
只要没有强指针指向对象,就会释放对象,弱指针不会这样,及时有弱指针指向对象,对象没有强指针指向,也会自动释放掉。一般,无需显式声明为强指针,但是在封装里,定义方法的时候需要写明。而弱指针,必须显式说明...
Android Weak Handler Memory safer implementation of android.os.Handler Problem Original implementation of Handler always keeps hard reference to handler in queue of execution. Any object in Message or...