【第六条:消除过期的对象引用】
其实这5、6、7三章是对对象使用一个说明。
合适的业务使用合适的技术,合理的使用对象池,对象,以及finalizer方法。
书中提到的关于 Stack 这里就不做说明。
文中提到了实现Map接口WeakHashMap
public static void main(String[] args) throws InterruptedException {
String a = new String("a");
String b = new String("b");
String c = new String("c");
String d = new String("d");
Map<String, String> map = new WeakHashMap<String, String>();
map.put(a, b);
map.put(c, d);
a = null;
System.gc();// 手动执行一次回收【因为jvm垃圾回收的时候时间是根据
// 分配的新生代和老年代的空间大小来决定的,系统来决定何时回收,
//一般情况应该是新生代或老年代空间不足的时候执行回收】
// Thread.sleep(5000);
Set<Entry<String, String>> data = map.entrySet();
for (Entry<String, String> entry : data) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
WeakHashMap做一些缓存数据操作是合适的。
上面代码打印出来的结果是:
c:d实际上通过手动gc一次,键值a为null被回收。
【第七条:避免使用终结方法(finalizer)】
原因:
1、终结方法通常是不可预测的,也很危险,一般情况下是不必要的
2、使用终结方法有一个非常严重的server性能损失
总结第六、七条实际上告诉读者,我的理解:
使用对象的过程中对于对象的使用回收大部分时间都应该交给Jvm自己去处理,但是可以使用jdk提供一些工具类来帮助更好的使用对象,如:weakhashmap等。
实际开发应用项目中合理的调整JVM内存分配也是很重要的一点,这个后期再补充。

本文探讨了在Java开发中如何合理地管理对象及其引用,包括利用WeakHashMap进行缓存管理,以及避免使用finalizer方法的原因。强调了大部分对象管理和回收工作应交由JVM处理的原则。
1073

被折叠的 条评论
为什么被折叠?



