banq
2011-11-05 07:45

2011年11月04日 23:06 "@billows"的内容
建立pool池,里没有1000个空bean,用完后在把bean中的数据清空,在放回pool池中。

这样理解对吗? ...

在Twitter的那个PPT中,首先提到的方案也是Cache和Pool,至于使用具体哪一个,根据你的功能,如果Bean是保存数据,那么使用Cache,如果Bean是带处理功能的很大的类,使用Pool。

不过,根据你说要把Bean中数据清空,好像Bean是含有数据或状态的,那么就要使用Cache了。

总体来说:为了避免大量对象创建销毁,耗费了JVM的新生代内存,频繁触发垃圾回收机制,导致系统暂停,那么就要控制这种对象大量创建,变成循环反复利用,Pool或Cache是一种好的方式,因为他们都有最大值限制;当然还有JVM的内存调优。

如何驯服java GC导致暂停? 使用16GiB以上heap

[该贴被banq于2011-11-05 08:32修改过]

billows
2011-11-05 20:34

2011年11月05日 07:45 "@banq"的内容
好像Bean是含有数据或状态的,那么就要使用Cache了 ...

cache一般是缓存那些不经常变化的数据,但我这些bean里面含有数据,

类似一些集合,且每次访问接口数据都不一样,如何缓存?如何控制

不同的请求避免因为缓存而导致数据出错,一直没有眉目,还望指教:)

bean类似于

public class RSWrapper{

private List<HotelBO> hotelinfoList;

public List<HotelBO> getHotelInfoList(){

return hotelinfoList();

}

public void disassembleXML(){

...

}

}

donglangjohn
2011-11-05 21:20

个人观点: 用pool

cache的“缓”是 “用”--“暂停”--“再用”

pool 是 “用” ,用完了就直接回pool里,省new了(bean类大/n多bean对象 都是很消耗资源的)。

从xml到bean再到后续business logic, 一直与这个bean相关,当business 完事后就把bean回pool,别忘了“init bean”就行。

pool的size 要去env中调了。

docsun
2011-11-06 20:46

2011年11月04日 23:06 "@billows"的内容
GC是回收这些内存了,但是GC太频繁。 ...

可以找一下微调JVM的帖子,尝试一下

billows
2011-11-06 22:04

2011年11月06日 20:46 "@docsun"的内容
微调JVM的帖子,尝试一下 ...

正在找一些JVM微调的帖子学习。:)

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT

27264.0 27264.0 0.0 111.9 218496.0 90825.8 546176.0 39700.2 131072.0 7 6441.5 1151 8.462 9 5.079 13.541

[该贴被billows于2011-11-06 23:02修改过]