jdk/src/jdk.management/share/classes/com/sun/management/internal/GarbageCollectorExtImpl.java
author sjiang
Fri, 17 Apr 2015 09:40:02 +0200
changeset 30355 e37c7eba132f
child 35284 36b96625b545
permissions -rw-r--r--
8042901: Allow com.sun.management to be in a different module to java.lang.management Reviewed-by: mchung, dfuchs, erikj, jbachorik
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30355
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     1
/*
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     2
 * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     4
 *
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    10
 *
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    15
 * accompanied this code).
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    16
 *
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    20
 *
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    23
 * questions.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    24
 */
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    25
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    26
package com.sun.management.internal;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    27
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    28
import com.sun.management.GarbageCollectionNotificationInfo;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    29
import com.sun.management.GarbageCollectorMXBean;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    30
import com.sun.management.GcInfo;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    31
import java.lang.management.ManagementFactory;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    32
import java.lang.management.MemoryPoolMXBean;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    33
import java.util.List;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    34
import javax.management.ListenerNotFoundException;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    35
import javax.management.MBeanNotificationInfo;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    36
import javax.management.Notification;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    37
import javax.management.NotificationFilter;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    38
import javax.management.NotificationListener;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    39
import javax.management.openmbean.CompositeData;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    40
import sun.management.GarbageCollectorImpl;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    41
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    42
/**
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    43
 * Implementation class for the garbage collector.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    44
 * Standard and committed hotspot-specific metrics if any.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    45
 *
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    46
 * ManagementFactory.getGarbageCollectorMXBeans() returns a list
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    47
 * of instances of this class.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    48
 */
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    49
public class GarbageCollectorExtImpl extends GarbageCollectorImpl
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    50
    implements GarbageCollectorMXBean {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    51
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    52
    public GarbageCollectorExtImpl(String name) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    53
        super(name);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    54
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    55
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    56
    // The memory pools are static and won't be changed.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    57
    // TODO: If the hotspot implementation begins to have pools
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    58
    // dynamically created and removed, this needs to be modified.
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    59
    private String[] poolNames = null;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    60
    private synchronized String[] getAllPoolNames() {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    61
        if (poolNames == null) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    62
            List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    63
            poolNames = new String[pools.size()];
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    64
            int i = 0;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    65
            for (MemoryPoolMXBean m : pools) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    66
                poolNames[i++] = m.getName();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    67
            }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    68
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    69
        return poolNames;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    70
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    71
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    72
    public GcInfo getLastGcInfo() {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    73
        GcInfo info = getGcInfoBuilder().getLastGcInfo();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    74
        return info;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    75
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    76
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    77
    private final static String notifName =
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    78
        "javax.management.Notification";
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    79
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    80
    private final static String[] gcNotifTypes = {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    81
        GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    82
    };
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    83
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    84
    private MBeanNotificationInfo[] notifInfo = null;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    85
    public MBeanNotificationInfo[] getNotificationInfo() {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    86
        synchronized (this) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    87
            if (notifInfo == null) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    88
                 notifInfo = new MBeanNotificationInfo[1];
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    89
                 notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    90
                                                          notifName,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    91
                                                          "GC Notification");
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    92
            }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    93
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    94
        return notifInfo;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    95
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    96
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    97
    private static long seqNumber = 0;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    98
    private static long getNextSeqNumber() {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
    99
        return ++seqNumber;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   100
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   101
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   102
    protected void createGCNotification(long timestamp,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   103
                              String gcName,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   104
                              String gcAction,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   105
                              String gcCause,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   106
                              GcInfo gcInfo)  {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   107
        if (!hasListeners()) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   108
            return;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   109
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   110
        Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   111
                                              getObjectName(),
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   112
                                              getNextSeqNumber(),
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   113
                                              timestamp,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   114
                                              gcName);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   115
        GarbageCollectionNotificationInfo info =
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   116
            new GarbageCollectionNotificationInfo(gcName,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   117
                                                  gcAction,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   118
                                                  gcCause,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   119
                                                  gcInfo);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   120
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   121
        CompositeData cd =
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   122
            GarbageCollectionNotifInfoCompositeData.toCompositeData(info);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   123
        notif.setUserData(cd);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   124
        sendNotification(notif);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   125
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   126
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   127
    public synchronized void addNotificationListener(NotificationListener listener,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   128
                                                     NotificationFilter filter,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   129
                                                     Object handback)
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   130
    {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   131
        boolean before = hasListeners();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   132
        super.addNotificationListener(listener, filter, handback);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   133
        boolean after = hasListeners();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   134
        if (!before && after) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   135
            setNotificationEnabled(this, true);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   136
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   137
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   138
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   139
    public synchronized void removeNotificationListener(NotificationListener listener)
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   140
        throws ListenerNotFoundException {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   141
        boolean before = hasListeners();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   142
        super.removeNotificationListener(listener);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   143
        boolean after = hasListeners();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   144
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   145
        if (before && !after) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   146
            setNotificationEnabled(this,false);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   147
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   148
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   149
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   150
    public synchronized void removeNotificationListener(NotificationListener listener,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   151
                                                        NotificationFilter filter,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   152
                                                        Object handback)
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   153
            throws ListenerNotFoundException
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   154
    {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   155
        boolean before = hasListeners();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   156
        super.removeNotificationListener(listener,filter,handback);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   157
        boolean after = hasListeners();
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   158
        if (before && !after) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   159
            setNotificationEnabled(this,false);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   160
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   161
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   162
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   163
    private GcInfoBuilder gcInfoBuilder;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   164
    // Invoked also by the VM
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   165
    private synchronized GcInfoBuilder getGcInfoBuilder() {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   166
        if(gcInfoBuilder == null) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   167
            gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames());
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   168
        }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   169
        return gcInfoBuilder;
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   170
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   171
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   172
    private native void setNotificationEnabled(GarbageCollectorMXBean gc,
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   173
                                                 boolean enabled);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   174
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   175
    // Invoked by the VM
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   176
    private static java.lang.management.GarbageCollectorMXBean
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   177
        createGarbageCollector(String name, String type) {
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   178
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   179
        return new GarbageCollectorExtImpl(name);
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   180
    }
e37c7eba132f 8042901: Allow com.sun.management to be in a different module to java.lang.management
sjiang
parents:
diff changeset
   181
}