将memcached与Java和ScheduledFuture对象一起使用

将memcached与Java和ScheduledFuture对象一起使用,java,memcached,out-of-memory,Java,Memcached,Out Of Memory,我一直在摆弄缓存对象(首先创建自己的缓存,结果是一个稳定的实现,但效率很低),然后尝试使用Memcached 虽然memcached工作得很好,但我遇到了一个问题 我如何使用我的对象如下: 我将数据库中的数据读入一个对象,然后将该对象存储在memcached中 每隔几分钟,我从memcached中检索对象,从数据库或memcached中的其他对象检索任何附加数据,使用任何新的/相关的数据更新对象,然后将对象存储回memcached 需要查看的对象将从memcached中提取、打包并发送到客户端

我一直在摆弄缓存对象(首先创建自己的缓存,结果是一个稳定的实现,但效率很低),然后尝试使用Memcached

虽然memcached工作得很好,但我遇到了一个问题

我如何使用我的对象如下:

  • 我将数据库中的数据读入一个对象,然后将该对象存储在memcached中
  • 每隔几分钟,我从memcached中检索对象,从数据库或memcached中的其他对象检索任何附加数据,使用任何新的/相关的数据更新对象,然后将对象存储回memcached
  • 需要查看的对象将从memcached中提取、打包并发送到客户端应用程序以供显示
这非常有效,除非我在memcached中创建存储更新查看的对象数量变得很高。Java/Tomcat jvm对我从memcached中提取的对象的垃圾收集速度似乎不够快,vm内存不足

我的内存限制为8GB(如果可以的话,我更愿意使用memcached将其减少到4 GB),所以我的问题是,有没有一种解决方案可以防止JVM的内存使用扩展得如此之快(或者调整垃圾收集器)

(注:我曾考虑使用谷歌的Guava缓存,但这限制了我在并发性方面的选择,例如,如果我必须重新启动tomcat,同时使用Guava和memcached似乎是一种我希望避免的重复)

--
Hein.

垃圾收集器不能“太慢”并且内存不足。在抛出OutOfMemoryError之前,保证垃圾收集器运行。只有当它无法释放足够的内存时,才会抛出错误

您应该使用探查器查看是否存在内存泄漏,或者是否只是挂起了太多的对象

之后,您可能希望调整GC以提高性能,请参见此处的示例: