find哪种types的垃圾收集器正在运行
发布JSE 5人机工程学旨在自动为您select合适的垃圾收集器types(除其他外)。
我想知道是否有任何方法来确认/了解垃圾收集器的types和JVM人体工程学select/目前设置的性能目标。
java -XX:+PrintCommandLineFlags -version
会显示你的默认垃圾收集器。 我还发现下面的页面很有用,它详细介绍了各种操作系统的默认垃圾收集器。
import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.util.List; public class GCInformation { public static void main(String[] args) { try { List<GarbageCollectorMXBean> gcMxBeans = ManagementFactory.getGarbageCollectorMXBeans(); for (GarbageCollectorMXBean gcMxBean : gcMxBeans) { System.out.println(gcMxBean.getName()); System.out.println(gcMxBean.getObjectName()); } } catch (RuntimeException re) { throw re; } catch (Exception exp) { throw new RuntimeException(exp); } } }
例如尝试下面的命令来了解各种GCtypes
java -XX:+PrintCommandLineFlags GCInformation java -XX:+PrintCommandLineFlags -XX:+UseParallelGC GCInformation java -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC -XX:+UseParNewGC GCInformation java -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC -XX:-UseParNewGC GCInformation
不是你的问题的直接答案,但我相信这是你在找什么。
根据Java 6文档1和2 (不只是Java 5):
参考文献1说:
在运行服务器虚拟机的服务器级机器上,垃圾收集器(GC)已经从前一个串行收集器变成了一个并行收集器
参考2说:
从J2SE 5.0开始,当应用程序启动时,启动程序可以尝试检测应用程序是否在“服务器级”计算机上运行,如果是,则使用Java HotSpot服务器虚拟机(服务器VM)而不是Java HotSpot客户端虚拟机(客户端VM)。
另外,参考文献2说:
注意:对于Java SE 6,服务器级机器的定义是至less有2个CPU和至less2GB物理内存的机器。
从这个信息,你可以知道,如果该框是一个服务器(根据2 ),那么它将使用并行GC。 你也可以推断它在运行时不会改变GC。
如果您深入研究文档,您可以find非服务器机器的正确答案。
-XX:+PrintGC -XX:+PrintGCDetails
这将打印使用GC的内容。 在我的情况下,它打印:
[GC (Allocation Failure) [PSYoungGen: 348192K->32K(348672K)] 356792K->8632K(1048064K), 0.0111518 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
这意味着并行垃圾收集器正在被年轻一代使用。 “分配失败”是指由于年轻代堆部分空间不足而开始垃圾收集。
这个命令打印正在运行的JVM的GCtypes:
jmap -heap <pid> | grep GC
对于现代计算机(多CPU,大内存),JVM会将其检测为服务器机器,默认情况下使用Parallel GC
,除非您明确指定要通过JVM标志使用哪个gc。
例如
jmap -heap 26806 | grep GC
输出:
8线程并行GC
使用GarbageCollectorMXBean来获得MemoryPoolMXBean 。
以下是关于如何以编程方式获取GC信息的一些信息,但它看起来可能事先需要GC的名称。 麻烦。
http://blogs.oracle.com/poonam/entry/how_to_programmatically_obtain_gc
编辑:尝试ManagementFactory.getGarbageCollectorMXBeans()
并遍历返回的列表。 其中之一将是积极的。
您可以使用-XX
标志来selectJRE的垃圾收集器。
使用5.0 Java TM虚拟机调整垃圾收集
另外,您可以使用JConsole监视垃圾回收。