java - 并行垃圾收集器是否与主程序一起在单独的线程上运行

标签 java performance garbage-collection visualvm

我正在使用 JKD8,正如我通过以下命令看到的,默认情况下 JVM 使用并行垃圾收集器。如何观察垃圾是否与主程序一起在单独的线程上运行?有没有类似-XX:-PrintGCDetails选项的参数?

顺便问一下,我正在使用 Visual VM,我也可以从那里观察它吗?例如,在 ->“线程”选项卡部分,因为我找不到它。

java -XX:+PrintCommandLineFlags  -XX:-PrintGCDetails -version
-XX:InitialHeapSize=535233856 -XX:MaxHeapSize=8563741696 -XX:+PrintCommandLineFlags -XX:-PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

最佳答案

垃圾收集器在单独的线程中运行。您可以在线程转储中观察到这一点:

...

"VM Thread" os_prio=0 tid=0x00007f4fec078000 nid=0x74c9 runnable 

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f4fec01f800 nid=0x74c5 runnable 

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f4fec021800 nid=0x74c6 runnable 

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f4fec023000 nid=0x74c7 runnable 

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f4fec025000 nid=0x74c8 runnable 

...

您可以通过向进程发送 SIGQUIT (3) 来生成线程转储:

kill -SIGQUIT <pid>

请参阅 RedHat:https://access.redhat.com/solutions/18178

关于java - 并行垃圾收集器是否与主程序一起在单独的线程上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794301/

相关文章:

java - key=(value) 语法的正则表达式

jQuery ajax 速度 vs 直接访问速度

java - JVM 使用 JOGL、顶点缓冲区对象并尝试在 finalize 方法中释放 vbo 时崩溃

node.js - 为什么React `renderToString`方法不使用集群?

c - 任意大小的矩形矩阵的运行时高效转置

c# - AddSingleton - 生命周期 - 类是否需要实现 IDisposable?

Java垃圾收集器

java - 如何使用 WebDriver 接受/消除未处理的警报?

java - Spring @Transactional 并发

java - 如何在 Java 中分配对象数组?