package cm;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.WeakHashMap;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
public class test201804010 {
public static void main(String[] args) {
// 1在集合中判断两个对象是否相等,首先比较两个对象的hashcode方法,其次比较两个对象的equals方法,注意次序。有一个不等,则两个对象不想等。
// P.sopl(new String("hello").hashCode()+"");
// P.sopl(new String("hello").hashCode()+"");//在stirng
// 中string类从写了hashcode,此方法是基于内容的。
// Reference接口的三个子类softReference只有在jvm、weakRefereach、Phantomreference。SoftReference比WeakReference生命力更强,当JVM的内存不吃紧时,即使引用的对象被置为空了,Soft还可以保留对该对象的引用,此时的JVM内存池实际上还保有原来对象,只有当内存吃紧的情况下JVM才会清除Soft的引用对象,并且会在未来重新加载该引用的对象。
// 而WeakReference则当清理内存池时会自动清理掉引用的对象。
//softreference(软引用)一个对象具有软引用,在内存空间足够的时候进行垃圾回收,垃圾回收不会回收该对象,只有在内存空间不足的情况下
//垃圾回收器才会将这个对象回收,在将来需要用到此引用时,恢复对象,也就是说如果有软引用指向一个对象,在内存紧张的时候,该对象还是会被回收的。
// int i=0;
// A a=new A();
// a.str="hello A";
// SoftReference<A> softr=new SoftReference<A>(a);
// while(softr.get()!=null) {
// P.sopl("softreference"+i);
// i++;
// if(i%10==0) {
// System.gc();
// P.sopl("system.gc()");
// }
// }
//weakreference(弱引用)当垃圾回收器扫描到弱引用的对象时,不管内存空间是否充足,都将此对象进行回收。也就是说一个对象只有一个弱引用,不管在何时垃圾回收器都能将它回收。
// WeakReference<A> weakr=new WeakReference<A>(b);
// while(weakr.get()!=null) {
// i++;
// if(i%10==0) {
// System.gc();//这个方法只是显示通知垃圾回收器进行垃圾回收,垃圾何时回收是由jvm决定的,回收动作发生的条件有两个,1.当程序空闲时,即没有应用线程在运行2.java堆空间不足时。
// P.sopl("system.gc()"+b.toString());
//
// }
// }//这里当然这个循环方法失败了,因为垃圾回收器没有执行回收。
//对于强引用,也就是我们平时定义的对象,默认采用的强引用,如果指向该引用的个数不为0,该对象永远不会被回收。
//什么是weakhashmap呢,就是将weakreference应用到hashmap上,WeakHashMap 内部是通过弱引用来管理entry的,弱引用的特性对应到 WeakHashMap 上意味着什么呢?将一对key, value放入到 WeakHashMap 里并不能避免该key值被GC回收,除非在 WeakHashMap 之外还有对该key的强引用。
//keys[i]=k;//keys是一个数组,keys[i]是一个强引用,指向k,在把k v当作一个entry存入weakhashmap类型的map中去,这样k就在外具有了一个强引用,在map内具有弱引用。
//map.put(k,v)
}
}
class A{
public String str;
}
softreference weakreference 学习总结
最新推荐文章于 2023-08-01 09:00:00 发布