试验环境: linux 2c2g + java17 功能:
Thread t1 = new Thread(() -> {
for (;;) {
try {
TimeUnit.MICROSECONDS.sleep(100);
byte[] bytes = new byte[10*1024*1024];
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t1.start();
Thread t2 = new Thread(() -> {
for (;;) {
try {
TimeUnit.MICROSECONDS.sleep(200);
byte[] bytes = new byte[5*1024*1024];
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
go func() {
for {
abc := make([]byte, 10*1024*1024)
abc = append(abc, 0)
time.Sleep(100 * time.Millisecond)
}
}()
go func() {
for {
abc := make([]byte, 5*1024*1024)
abc = append(abc, 0)
time.Sleep(200 * time.Millisecond)
}
}()
java指标
-
-Xmx1536m -XX:+UseZGC
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 1000 28005 77.80 0.88 0.00 78.68 - java
Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command
Average: 1000 28005 549.93 0.00 86575952 1825311 97.01 java
Average: UID PID cswch/s nvcswch/s Command
Average: 1000 28005 0.00 0.00 java
-
-Xmx1536m -XX:+UseG1GC
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 1000 16789 78.02 1.10 0.00 79.12 - java
Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command
Average: 1000 16789 0.00 0.00 4318376 278340 14.79 java
Average: UID PID cswch/s nvcswch/s Command
Average: 1000 16789 0.00 0.00 java
-
-Xmx1536m -XX:+UseParallelGC
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 1000 25512 73.90 0.66 0.00 74.56 - java
Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command
Average: 1000 25512 240.79 0.00 4285924 707090 37.58 java
Average: UID PID cswch/s nvcswch/s Command
Average: 1000 25512 0.00 0.00 java
go指标
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 30886 5.59 3.06 0.00 8.65 - myapp
Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command
Average: 0 30886 1248.55 0.00 707196 30036 1.60 myapp
Average: UID PID cswch/s nvcswch/s Command
Average: 0 30886 344.75 3.77 myapp
总结
这只是一个简单的内存分配小场景, 不具备任何代表与偏向性。