如何减少Java GC年轻大小暂停时间

时间:2017-01-25 14:00:23

标签: java garbage-collection jvm

我正在尝试编写Java程序来理解gc优化。我是java的新手。该程序同时从cassandra中读取了大量的关键字,让我们说2并行性。阅读后,我与行无关。他们将等待GC。读取6个分区键后,First GC运行并需要10秒钟。在我看来,前4个分区键正在被删除。

我的问题是,10秒gc暂停两次,我使用GC设置如下。有什么建议吗?

java -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=9010 \
  -Dcom.sun.management.jmxremote.local.only=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -Xms24g \
  -Xmx24g \
  -XX:+PrintGC \
  -XX:+UseG1GC \
  -XX:MaxGCPauseMillis=200 \
  -XX:G1HeapRegionSize=6 \
  -XX:ParallelGCThreads=12 \
  -XX:ConcGCThreads=4 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:G1NewSizePercent=70 \
  -XX:G1MaxNewSizePercent=80 \
  -XX:InitiatingHeapOccupancyPercent=30 \
  -jar mapreducer-1.0-SNAPSHOT.jar

1 个答案:

答案 0 :(得分:2)

理论上,减少年轻空间集合的GC暂停时间的方法是减少年轻/新的空间大小。

事实上,这些选择:

  -XX:G1NewSizePercent=70 \
  -XX:G1MaxNewSizePercent=80 \

迫使年轻空间占总堆大小的70%到80%。这可能是GC无法达到此指定目标的原因:

  -XX:MaxGCPauseMillis=200 \

年轻的空间需要小得多。