请问,我这样做是不是很浪费资源啊???

在JIVE中,要在页面上打印用户的信息,要先GETUSER(USERID),也就是先实例化一个USER类,然后再用它USER.GETNAME()等等,我打算再我开发的系统中也这样用,但与JIVE不同的是,我的USER信息很多,比JIVE的多很多,换句话说要实例化它代价要大一点,比如我只需要取得用户的名字,就必须先实例化USER,感觉付出与得到的不成比例,(实例化一个看起来很打的类,却只是执行取得名字这一点小操作,然后又释放,很浪费啊)。
请问,我得担心有必要吗?真的如我所料很浪费吗?如果有必要,我该怎么做来改变这种情况??????请回答,谢谢

象jive中一样,你也可以专门用一个表来放用户名,这样读入的速度就快一些!事实上实例化一个类的成本没有读数据库的大啊!

你的用户数据是在数据库中吗?

首先你的担心是正确的,Java设计中应该有珍惜资源的习惯。
你可以使用Cache 或Session的方法 ,防止反复构造User对象。

结合或者单独使用延迟初始化的策略来降低开销

结合或者单独使用延迟初始化的策略来降低开销

请问是什么意思啊?????

hxz
我的数据是放在数据库里.

BANG
你的意思是第一次初始化后将他放在SESSION或CASH里面,以后再用同样的USER时,就从SESSION或CASH里面取????


谢谢你们的指点!!

up 等待指点

我的做法最简单,用静态的Hashtable来缓存用户对象,如果Hash表里面没有相应数据在到数据库中读取
如果怕这样太消耗内存的话,就用一个队列存储对象的访问此时,把访问频繁的放在前面,定时删除队伍尾部的就可以了
办法很土,不能在Cluster上用

请问什么是"延迟初始化的策略"

BANG期待你的回答

用mem_fox 的方法是大量用户时的很好的办法
但是你说的是用户的属性(信息)很多,造成实例化时相关信息的浪费
我试着提几个方法
一:用外键关联一些用户信息
二:干脆把常用的那几个属性提出来做一个小表,这样可以加速,如果还有要求,可以把这个小表的信息放到"缓冲"中来
三:如果用户很多并且不确定的访问,可以借用jive中的cache机制啊(我也没看过,很想读源代码,看完记得写一篇出来啊!)
我是新手有什么错误请指出!

to:hxz
你太谦虚了,看了不少你的贴子,比起我来,你算是前辈了,以后还要多多向你学习呢,希望不吝赐教哦.

将非关键性树型存储到Map里是个很好的办法,你的Map可以用XML来配置属性,这是一种模式,网上的pdf书中有相关介绍。

请CC点明在哪有下载啊????

可以考虑建一个类 UserKey
然后在原先的 User类中增加一个方法 getUserByKey(UserKey) 来根据Key取得用户数据(假设名字是唯一的)

它可以解决你的问题。当你只需要访问用户名字时,你可以只实例化Key,节约资源,如果想要访问用户的别的属性,无缝的用getUserByKey取得。

If your class is simply a wrapper or a data structure, then there is no much overhead( less than 100 bytes) to make it a object instance. But how to manage resource efficiently and object's lifecycle can be complicated. i.e.: no matter you store it in a dedicate cache or session, how to control memory size, when to expire it if it becomes obsolete due to update or delete...

In general, you need a mechanism that can selective cache any table( cache from Expresso is a good ref), with basic control ( LRU or usage count), at least use a weak referenced hashmap to avoid overload. If the cached info is not read only, you'd better make it a class, it's smart enough to sync itself with DB and cache when change happens.