All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.patterncat.metrics.jvm.ClassLoadingMetricSet Maven / Gradle / Ivy

The newest version!
package cn.patterncat.metrics.jvm;

import com.codahale.metrics.Gauge;
import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricSet;

import java.lang.management.ClassLoadingMXBean;
import java.lang.management.ManagementFactory;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * 替换com/codahale/metrics/jvm/ClassLoadingGaugeSet.java
 * 增加currentlyLoaded指标
 */
public class ClassLoadingMetricSet implements MetricSet {
    private ClassLoadingMXBean classLoadingMXBean;

    private Gauge totalLoadedClassesGauge;
    private Gauge unloadedClassesGauge;
    private Gauge currentlyLoadedClassesGauge;

    private Map metricsByNames;

    ClassLoadingMetricSet() {
        this.classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();

        Map metricsByNames = new HashMap<>();

        this.totalLoadedClassesGauge = new Gauge() {
            @Override
            public Long getValue() {
                return classLoadingMXBean.getTotalLoadedClassCount();
            }
        };
        metricsByNames.put("totalLoaded", totalLoadedClassesGauge);

        this.unloadedClassesGauge = new Gauge() {
            @Override
            public Long getValue() {
                return classLoadingMXBean.getUnloadedClassCount();
            }
        };
        metricsByNames.put("totalUnloaded", unloadedClassesGauge);

        this.currentlyLoadedClassesGauge = new Gauge() {
            @Override
            public Integer getValue() {
                return classLoadingMXBean.getLoadedClassCount();
            }
        };
        metricsByNames.put("currentlyLoaded", currentlyLoadedClassesGauge);

        this.metricsByNames = metricsByNames;
    }

    @Override
    public Map getMetrics() {
        return Collections.unmodifiableMap(metricsByNames);
    }

    Gauge getTotalLoadedClassesGauge() {
        return totalLoadedClassesGauge;
    }

    Gauge getUnloadedClassesGauge() {
        return unloadedClassesGauge;
    }

    Gauge getCurrentlyLoadedClassesGauge() {
        return currentlyLoadedClassesGauge;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy