做这个设计方案的时候卡壳了,请大家帮我想想思路。
缓存的设计,摆脱各位大神了。
public class Test02
{
public static void main(String[] args)
{
/*
设计初衷:
1. Bean对象相当庞大,相同数据特别多,内存消耗大。
2. 对值相同的Bean进行同时修改的操作也相当多,如果进行遍历修改,非常耗时。
设计目标:
1. 实现一个缓存进行管理,如果重新生成的一个Bean对象等于缓存中的某个值,将该对象抛弃,直接引用缓存中的值。
2. 做以上操作时,时间要快。
*/
Bean b01 = new Bean();
b01.setName("Hello");
//TODO 加入自己实现缓存
Bean b02 = new Bean();
b02.setName("Hello");
//TODO 缓存的管理
//实现以下功能
//if b01.equals(b02) == true
System.out.println(b01 == b02); //结果应该为true
//意思就是b01和b02使用相同的一个引用
/*
//和Java自身的String管理雷同的功能
String a = "hello";
String b = "hello";
System.out.println(a == b); //结果为true
a = "world";
System.out.println(a == b); //false
b = "world";
System.out.println(a == b); //true
*/
}
}public class Bean
{
private String name = null;
private String value = null;
....
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
....
}
缓存的设计,摆脱各位大神了。
public class Test02
{
public static void main(String[] args)
{
/*
设计初衷:
1. Bean对象相当庞大,相同数据特别多,内存消耗大。
2. 对值相同的Bean进行同时修改的操作也相当多,如果进行遍历修改,非常耗时。
设计目标:
1. 实现一个缓存进行管理,如果重新生成的一个Bean对象等于缓存中的某个值,将该对象抛弃,直接引用缓存中的值。
2. 做以上操作时,时间要快。
*/
Bean b01 = new Bean();
b01.setName("Hello");
//TODO 加入自己实现缓存
Bean b02 = new Bean();
b02.setName("Hello");
//TODO 缓存的管理
//实现以下功能
//if b01.equals(b02) == true
System.out.println(b01 == b02); //结果应该为true
//意思就是b01和b02使用相同的一个引用
/*
//和Java自身的String管理雷同的功能
String a = "hello";
String b = "hello";
System.out.println(a == b); //结果为true
a = "world";
System.out.println(a == b); //false
b = "world";
System.out.println(a == b); //true
*/
}
}public class Bean
{
private String name = null;
private String value = null;
....
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
....
}
于是你的程序中实际共享了 b01,然后A线程设置其身高或年龄进行修改。
那么B线程原来所访问的同名“张三”,就被莫名其妙的修改了身高或年龄了。
合理的节省内存方式,就是把可以共享的Bean直接封装为单例,这个如果你使用Spring的话,直接可以借助Spring框架来实现。