class Builder {

        private final PrometheusProperties config;

        private Builder(PrometheusProperties config) {
            this.config = config;
        }

        /**
         * Register all JVM metrics with the default registry.
         * <p>
         * It's safe to call this multiple times:
         * Only the first call will register the metrics, all subsequent calls will be ignored.
         */
        public void register() {
            if (!registeredWithTheDefaultRegistry.getAndSet(true)) {
                register(PrometheusRegistry.defaultRegistry);
            }
        }

        /**
         * Register all JVM metrics with the {@code registry}.
         * <p>
         * You must make sure to call this only once per {@code registry}, otherwise it will
         * throw an Exception because you are trying to register duplicate metrics.
         */
        public void register(PrometheusRegistry registry) {<FILL_FUNCTION_BODY>}
    }

            JvmThreadsMetrics.builder(config).register(registry);
            JvmBufferPoolMetrics.builder(config).register(registry);
            JvmClassLoadingMetrics.builder(config).register(registry);
            JvmCompilationMetrics.builder(config).register(registry);
            JvmGarbageCollectorMetrics.builder(config).register(registry);
            JvmMemoryPoolAllocationMetrics.builder(config).register(registry);
            JvmMemoryMetrics.builder(config).register(registry);
            JvmNativeMemoryMetrics.builder(config).register(registry);
            JvmRuntimeInfoMetric.builder(config).register(registry);
            ProcessMetrics.builder(config).register(registry);
        
<no_super_class>