Effective Java 学习笔记(六、七)

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

【第六条:消除过期的对象引用】

其实这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内存分配也是很重要的一点,这个后期再补充。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值