将 memcached 与 Java 和 ScheduledFuture 对象一起使用
Posted
技术标签:
【中文标题】将 memcached 与 Java 和 ScheduledFuture 对象一起使用【英文标题】:Using memcached with Java and ScheduledFuture objects 【发布时间】:2013-07-31 08:41:21 【问题描述】:我一直在玩缓存对象(首先创建我自己的缓存,结果证明这是一个稳定的实现但效率非常低),然后尝试使用 Memcached。
虽然 memcached 运行良好,但我遇到了问题。
我如何使用我的对象如下:
我将数据库中的数据读取到一个对象中,然后将该对象存储在 memcached 中。 每隔几分钟,我会从 memcached 中检索对象,从数据库或 memcached 中的其他对象中检索任何其他数据,使用任何新的/相关数据更新对象,然后将对象存储回 memcached。 需要查看的对象从 memcached 中提取、打包并发送到客户端应用程序进行显示。这很好用,除非我在 memcached 中创建-存储-更新-查看的对象数量变多。 Java/Tomcat-jvm 在我从 memcached 中提取的对象上似乎没有“足够快”地进行垃圾收集,并且 vm 内存不足。
我的内存限制为 8GB(如果可以的话,最好将其降低到 4 - 使用 memcached),所以我的问题是,有没有解决方案可以防止 JVM 的内存使用量膨胀得如此之快(或调整垃圾收集器)?
(PS 我曾考虑使用 Google 的 Guava 缓存,但这限制了我在并发方面的选择,例如,如果我必须重新启动 tomcat,并且同时使用 Guava 和 memcached 似乎是我希望避免的各种重复)
-- 海因。
【问题讨论】:
【参考方案1】:垃圾收集器不能“太慢”而耗尽内存。在抛出 OutOfMemoryError 之前,保证垃圾收集器运行。只有当它不能释放足够的内存时才会抛出错误。
您应该使用分析器来查看您是否存在内存泄漏,或者您是否只是挂在了太多对象上。
之后您可能想要调整 GC 以提高性能,例如,请参见此处:GC tuning
【讨论】:
以上是关于将 memcached 与 Java 和 ScheduledFuture 对象一起使用的主要内容,如果未能解决你的问题,请参考以下文章
20210704 JAVA Redis和Memcached的一些区别
20210704 JAVA Redis和Memcached的一些区别
20210704 JAVA Redis和Memcached的一些区别