将序列化和压缩的对象保留在内存中

时间:2010-12-06 14:09:45

标签: java caching serialization

我目前正在开发一个应用程序的一部分,其中必须选择“大量”数据用于进一步的工作,我的印象是I / O是限制性的而不是以下工作。 我的想法是将所有这些对象放在内存中,但序列化为压缩对象。问题是,如果访问这样的对象比直接访问数据库更快,如果这是一个好主意。 (如果它在内存消耗方面是可行的=序列化形式比普通对象使用更少的内存)

2011年2月编辑:

对象的创建是缓慢的部分,而不是数据库访问本身。拥有全部内存是不可能的,使用ehcache选项“溢出到磁盘”实际上比从数据库中获取数据要慢。标准的java序列化也无法使用。它也慢得多。所以基本上我无能为力......

3 个答案:

答案 0 :(得分:1)

您基本上是在寻找内存缓存或内存中的数据网格。这类东西有很多API /产品。 ehcache / hibernate chace / gridgain等等

答案 1 :(得分:0)

如果压缩的序列化表单是一个大对象,它将使用更少的内存。然而对于较小的物体,哪些使用primtives。原始对象将小得多。

我首先要检查你是否真的需要这样做。例如你能消耗更多的内存吗?或重构你的对象,以便他们使用更少的内存。

答案 2 :(得分:0)

“我的印象是I / O是限制性的,而不是以下工作。” - >在开始实现这样的事情之前,我会非常肯定。

我建议你使用的更简单的方法是在缓存大小过大时使用ehcache选项存储在磁盘上。

另一种完全不同的方法可能是使用一些基于doc的nosql db,如couchdb来存储选择“用于进一步工作”的对象

相关问题