Java类会造成内存的泄露吗?为什么?举例说明。
例如:Set set = new HashSet();
ReflectPoint rp = new ReflectPoint(3,4);//测试对象rp,根据其x,y属性来算出hashCode
set.add(rp);
如果现在不需要rp数据了,想从内存中删除掉该对象引用,可以用
set.remove(rp);
此时可以清理出内存空间。但是如果修改了hashCode生成的x,y属性:
rp.x = 66;
此时调用set.remove(rp);,则无法删除该对象引用,因为改变了x属性的值,其
hashCode也会改变,假如本来rp对象存放在A区域里面,hashCode一变,此时set.remove(rp)会从改变后的hashCode所对应的那个区域下寻找是否存在rp对象,存在就删除,而此时并不能找到,则不能删除掉,rp对象引用还会存放在内存中,占用内存空间,不被释放,造成内存的泄露。
建议:不要轻易修改用于生成hashCode的属性。
欢迎大神们多举几个例子。
|