JVM常用概念之垃圾回收设计与停顿
- 手机
- 2025-09-15 21:42:01

在我们应用程序运行期间,我们是需要尽可能避免垃圾回收。 图1:不同垃圾回收器的设计(黄色代表STW,绿色代表并发)
实验 计算机配置 Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro14,2 Processor Name: Intel Core i5 Processor Speed: 3.1 GHz Number of Processors: 1 Total Number of Cores: 2 L2 Cache (per Core): 256 KB L3 Cache: 4 MB Memory: 8 GB Boot ROM Version: 428.0.0.0.0 SMC Version (system): 2.44f1 Serial Number (system): Hardware UUID: JDK环境实验源码 import java.util.*; public class Case3 { static List<Object> array; public static void main(String [] args) { array = new ArrayList<>(); for (int i = 0; i < 100000000; i++) { array.add(new Object()); } } } 用例 JDK9-G1 time java -Xms4G -Xmx4G -Xlog:gc Case3 [0.036s][info][gc] Using G1 [1.576s][info][gc] GC(0) Pause Young (G1 Evacuation Pause) 370M->366M(4096M) 952.195ms [2.817s][info][gc] GC(1) Pause Young (G1 Evacuation Pause) 744M->747M(4096M) 847.381ms [4.056s][info][gc] GC(2) Pause Young (G1 Evacuation Pause) 1105M->1106M(4096M) 776.229ms [5.561s][info][gc] GC(3) Pause Young (G1 Evacuation Pause) 1552M->1554M(4096M) 771.033ms [6.332s][info][gc] GC(4) Pause Young (G1 Evacuation Pause) 1732M->1733M(4096M) 557.217ms [6.899s][info][gc] GC(5) Pause Initial Mark (G1 Humongous Allocation) 1894M->1896M(4096M) 422.604ms [6.899s][info][gc] GC(6) Concurrent Cycle [8.534s][info][gc] GC(7) Pause Young (G1 Evacuation Pause) 2476M->2477M(4096M) 569.203ms [9.226s][info][gc] GC(8) Pause Young (G1 Evacuation Pause) 2655M->2656M(4096M) 490.367ms [12.341s][info][gc] GC(6) Pause Remark 2758M->2758M(4096M) 1.318ms [13.057s][info][gc] GC(6) Pause Cleanup 2758M->2212M(4096M) 2.659ms [13.173s][info][gc] GC(6) Concurrent Cycle 6273.724ms real 0m13.399s user 0m29.455s sys 0m2.855s JDK9-Parallel time java -XX:+UseParallelOldGC -Xms4G -Xmx4G -Xlog:gc Case3 [0.024s][info][gc] Using Parallel [1.591s][info][gc] GC(0) Pause Young (Allocation Failure) 878M->714M(3925M) 892.647ms [3.270s][info][gc] GC(1) Pause Young (Allocation Failure) 1738M->1442M(3925M) 1371.100ms real 0m3.644s user 0m7.956s sys 0m1.088s JDK9-Concurrent Mark Sweep time java -XX:+UseConcMarkSweepGC -Xms4G -Xmx4G -Xlog:gc Case3 Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. [0.026s][info][gc] Using Concurrent Mark Sweep [1.661s][info][gc] GC(0) Pause Young (Allocation Failure) 259M->231M(4062M) 1361.996ms [2.293s][info][gc] GC(1) Pause Young (Allocation Failure) 497M->511M(4062M) 563.307ms [2.974s][info][gc] GC(2) Pause Young (Allocation Failure) 777M->851M(4062M) 623.093ms [3.527s][info][gc] GC(3) Pause Young (Allocation Failure) 1117M->1161M(4062M) 502.224ms [4.807s][info][gc] GC(4) Pause Young (Allocation Failure) 1694M->1828M(4062M) 1038.882ms [6.565s][info][gc] GC(5) Pause Young (Allocation Failure) 2094M->2364M(4062M) 1688.745ms [6.580s][info][gc] GC(6) Pause Initial Mark 2369M->2369M(4062M) 14.197ms [6.580s][info][gc] GC(6) Concurrent Mark [9.074s][info][gc] GC(7) Pause Young (Allocation Failure) 3031M->3166M(4062M) 1581.572ms [15.418s][info][gc] GC(6) Concurrent Mark 8838.424ms [15.418s][info][gc] GC(6) Concurrent Preclean [15.485s][info][gc] GC(6) Concurrent Preclean 67.031ms [15.486s][info][gc] GC(6) Concurrent Abortable Preclean [15.486s][info][gc] GC(6) Concurrent Abortable Preclean 0.126ms [15.718s][info][gc] GC(6) Pause Remark 3390M->3390M(4062M) 232.467ms [15.719s][info][gc] GC(6) Concurrent Sweep [16.728s][info][gc] GC(6) Concurrent Sweep 1009.828ms [16.728s][info][gc] GC(6) Concurrent Reset [16.744s][info][gc] GC(6) Concurrent Reset 15.565ms real 0m17.045s user 0m29.167s sys 0m4.394s OpenJDK11-Shenandoah time java -XX:+UseShenandoahGC -Xms4G -Xmx4G -Xlog:gc Case3 [0.006s][info][gc] Min heap equals to max heap, disabling ShenandoahUncommit [0.012s][info][gc] Heuristics ergonomically sets -XX:+ExplicitGCInvokesConcurrent [0.012s][info][gc] Heuristics ergonomically sets -XX:+ShenandoahImplicitGCInvokesConcurrent [0.013s][info][gc] Using Shenandoah [0.894s][info][gc] Trigger: Learning 1 of 5. Free (2860M) is below initial threshold (2867M) [0.896s][info][gc] GC(0) Concurrent reset 0.560ms [1.062s][info][gc] GC(0) Pause Init Mark (process weakrefs) 0.634ms [3.511s][info][gc] Cancelling GC: Stopping VM [3.511s][info][gc] GC(0) Concurrent marking (process weakrefs) 2449.346ms real 0m3.760s user 0m3.191s sys 0m1.752s JDK17-Epsilon time java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xms4G -Xmx4G -Xlog:gc Case3 [0.004s][info][gc] Using Epsilon [0.005s][warning][gc,init] Consider enabling -XX:+AlwaysPreTouch to avoid memory commit hiccups [0.199s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 205M (5.01%) used [0.314s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 453M (11.07%) used [0.442s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 676M (16.51%) used [0.639s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 1014M (24.77%) used [0.918s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 1222M (29.85%) used [0.941s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 1517M (37.06%) used [1.483s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 1725M (42.14%) used [1.660s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 2274M (55.54%) used [2.102s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 2482M (60.62%) used [2.287s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 2690M (65.70%) used [2.340s][info ][gc ] Heap: 4096M reserved, 4096M (100.00%) committed, 2730M (66.67%) used real 0m2.551s user 0m1.307s sys 0m1.030s
JVM常用概念之垃圾回收设计与停顿由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JVM常用概念之垃圾回收设计与停顿”