我正在尝试编写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
答案 0 :(得分:2)
理论上,减少年轻空间集合的GC暂停时间的方法是减少年轻/新的空间大小。
事实上,这些选择:
-XX:G1NewSizePercent=70 \
-XX:G1MaxNewSizePercent=80 \
迫使年轻空间占总堆大小的70%到80%。这可能是GC无法达到此指定目标的原因:
-XX:MaxGCPauseMillis=200 \
年轻的空间需要小得多。