java代码中获取full gc、young gc情况

对于大型的高并发服务,我们可能需要定时或实时获取进程的gc情况,很荣幸,java给我们提供了现成的方法。

    private static void reportGC(ReportAPI reporter) {
        long fullCount = 0, fullTime = 0, youngCount = 0, youngTime = 0;
        List<GarbageCollectorMXBean> gcs = ManagementFactory.getGarbageCollectorMXBeans();
        for (GarbageCollectorMXBean gc : gcs) {
            switch (GarbageCollectorName.of(gc.getName())) {
                case MarkSweepCompact:
                case PSMarkSweep:
                case ConcurrentMarkSweep:
                    fullCount += gc.getCollectionCount();
                    fullTime += gc.getCollectionTime();
                    break;
                case Copy:
                case ParNew:
                case PSScavenge:
                    youngCount += gc.getCollectionCount();
                    youngTime += gc.getCollectionTime();
                    break;
            }
            //todo your deal code, perfcounter report or write log here
        }

getGarbageCollectorMXBeans可以获取JVM中不同的对象列表,从中找出我们的jvm.properties中配置使用的gc方法,分别进行统计次数及时间即可。

    /**
     * Returns a list of {@link GarbageCollectorMXBean} objects
     * in the Java virtual machine.
     * The Java virtual machine may have one or more
     * <tt>GarbageCollectorMXBean</tt> objects.
     * It may add or remove <tt>GarbageCollectorMXBean</tt>
     * during execution.
     *
     * @return a list of <tt>GarbageCollectorMXBean</tt> objects.
     *
     */
    public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
        return ManagementFactoryHelper.getGarbageCollectorMXBeans();
    }

拿到full gc时间、次数及young gc时间及次数,进行后续的具体分析就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值