我有一个可以每分钟接收数百个请求的Web服务应用程序。使用默认的GC,Java 8中的VM每隔几分钟就会停止一次,所以有些请求会非常慢。
我将GC更改为G1,如下所示:
-XX:+UseG1GC
但我在这里读到G1较慢:
http://www.optaplanner.org/blog/2015/07/31/WhatIsTheFastestGarbageCollectorInJava8.html
有没有办法使用默认的Java 8收集器更频繁地停止世界,那么对某些请求的创伤效果会更小?还有什么其他解决方案?
答案 0 :(得分:1)
你的问题意味着你远离关于“垃圾收集器”设置的非天真想法。
所有最近的垃圾收集器都有不同的属性;并且他们有大量的设置可以用来改变他们的行为以实现某些目标。
含义:如果G1较慢则无关紧要。如果您能够以比当前设置更强大的更好的方式调整它,那么您应该做出选择。
长话短说:您似乎处于应用程序(垃圾收集)性能真正问题的位置。然后只有一件事要做:开始测量。了解您的代码正在做什么;它是如何做到的;以及它如何与JIT和GC“交互”。然后确定要优化的目标;并开始进行实验(理想情况下,您只需更改一个配置更改)以找到可将您移向目标的JIT / GC调整设置。
示例:使用G1可能就足够了;并给出一个适合你的“暂停时间目标”。但也许你必须为你的JVM启用“gc tracing”;了解GC必须为您的应用程序做多少工作;也许答案可能是修复代码中的某些内容......简单地生成更少的垃圾。
喜欢:调整GC没有多大意义;如果你的应用程序每分钟生成(可避免的)GB“垃圾”。