// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.common.util;

import javax.management.Notification;
import java.util.Iterator;
import java.util.List;
import javax.management.NotificationFilter;
import javax.management.openmbean.CompositeData;
import javax.management.NotificationEmitter;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import javax.annotation.Nonnull;
import com.sun.management.GarbageCollectionNotificationInfo;
import java.util.function.Consumer;

public class GCUtil
{
    public static void register(@Nonnull final Consumer<GarbageCollectionNotificationInfo> consumer) {
        final List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
        for (final GarbageCollectorMXBean gcBean : gcBeans) {
            final NotificationEmitter emitter = (NotificationEmitter)gcBean;
            emitter.addNotificationListener((notification, handback) -> {
                if (notification.getType().equals("com.sun.management.gc.notification")) {
                    final GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from((CompositeData)notification.getUserData());
                    consumer.accept(info);
                }
            }, null, null);
        }
    }
}
