在编写仅使用缓存作为存储的应用程序时,是否有人知道正确的配置/开发方法?
为了给出一些背景知识,应用程序不需要存储任何信息(它实际上存储了一个时间戳,但我稍后会解释)因为它只读取另一个应用程序写的内容。我们有一个存储过程从该应用程序的数据库中读取并返回该信息。从应用程序启动的那一刻起,通过主题通知任何更新,以便不再需要数据库(直到下次重新启动)。
一旦加载了所有内容,当消耗某些消息时,必须读取缓存中的每个记录以循环遍历它们。应用程序保留一个Lock of Lock对象,每个对象用于缓存中的每个记录,以避免竞争条件。如果记录符合某些条件,则使用最多5000条记录的后写,将时间戳写入缓存和数据库。
该应用程序已经开发但我认为我们在GC方面存在一些问题。我们不断加入峰值,我想知道是否有任何关于减少它们的建议。
这些是我们迄今为止所做的事情:
GC overhead limit exceeded
。通常情况下,应用程序会在某些GC之后继续降低它使用的内存量,但有时它似乎无法处理负载。 除此之外,我不知道如何配置JVM或GC使用何种类型。有人建议我开始阅读的任何想法或任何博客或文件?
谢谢!
答案 0 :(得分:1)
当您运行Java 8时,您可以更改垃圾收集器。所谓的" Garbage First"从早期版本的Java 7开始,GC一直作为一种选择。从婴儿期开始的问题已经解决,并且通常建议用于需要快速响应的交互式应用程序。
可以使用-XX:+UseG1GC
启用它,它将成为Java 9的默认设置。
在http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html
了解详情