History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/management/GarbageCollectionNotificationInfo.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/management/GarbageCollectionNotificationInfo.java+237−0
@@ -0,0 +1,237 @@
1/*
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.management;
27
28import javax.management.Notification;
29import javax.management.openmbean.CompositeData;
30import javax.management.openmbean.CompositeDataView;
31import javax.management.openmbean.CompositeType;
32import java.util.Collection;
33import java.util.Collections;
34import sun.management.GarbageCollectionNotifInfoCompositeData;
35
36/**
37 * The information about a garbage collection
38 *
39 * <p>
40 * A garbage collection notification is emitted by {@link GarbageCollectorMXBean}
41 * when the Java virtual machine completes a garbage collection action
42 * The notification emitted will contain the garbage collection notification
43 * information about the status of the memory:
44 * <u1>
45 * <li>The name of the garbage collector used perform the collection.</li>
46 * <li>The action performed by the garbage collector.</li>
47 * <li>The cause of the garbage collection action.</li>
48 * <li>A {@link GcInfo} object containing some statistics about the GC cycle
49 (start time, end time) and the memory usage before and after
50 the GC cycle.</li>
51 * </u1>
52 *
53 * <p>
54 * A {@link CompositeData CompositeData} representing
55 * the {@code GarbageCollectionNotificationInfo} object
56 * is stored in the
57 * {@linkplain javax.management.Notification#setUserData userdata}
58 * of a {@linkplain javax.management.Notification notification}.
59 * The {@link #from from} method is provided to convert from
60 * a {@code CompositeData} to a {@code GarbageCollectionNotificationInfo}
61 * object. For example:
62 *
63 * <blockquote><pre>
64 * Notification notif;
65 *
66 * // receive the notification emitted by a GarbageCollectorMXBean and set to notif
67 * ...
68 *
69 * String notifType = notif.getType();
70 * if (notifType.equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) {
71 * // retrieve the garbage collection notification information
72 * CompositeData cd = (CompositeData) notif.getUserData();
73 * GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from(cd);
74 * ....
75 * }
76 * </pre></blockquote>
77 *
78 * <p>
79 * The type of the notification emitted by a {@code GarbageCollectorMXBean} is:
80 * <ul>
81 * <li>A {@linkplain #GARBAGE_COLLECTION_NOTIFICATION garbage collection notification}.
82 * <br>Used by every notification emitted by the garbage collector, the details about
83 * the notification are provided in the {@linkplain #getGcAction action} String
84 * <p></li>
85 * </ul>
86 **/
87
88public class GarbageCollectionNotificationInfo implements CompositeDataView {
89
90 private final String gcName;
91 private final String gcAction;
92 private final String gcCause;
93 private final GcInfo gcInfo;
94 private final CompositeData cdata;
95
96 /**
97 * Notification type denoting that
98 * the Java virtual machine has completed a garbage collection cycle.
99 * This notification is emitted by a {@link GarbageCollectorMXBean}.
100 * The value of this notification type is
101 * {@code com.sun.management.gc.notification}.
102 */
103 public static final String GARBAGE_COLLECTION_NOTIFICATION =
104 "com.sun.management.gc.notification";
105
106 /**
107 * Constructs a {@code GarbageCollectionNotificationInfo} object.
108 *
109 * @param gcName The name of the garbage collector used to perform the collection
110 * @param gcAction The name of the action performed by the garbage collector
111 * @param gcCause The cause the garbage collection action
112 * @param gcInfo a GcInfo object providing statistics about the GC cycle
113 */
114 public GarbageCollectionNotificationInfo(String gcName,
115 String gcAction,
116 String gcCause,
117 GcInfo gcInfo) {
118 if (gcName == null) {
119 throw new NullPointerException("Null gcName");
120 }
121 if (gcAction == null) {
122 throw new NullPointerException("Null gcAction");
123 }
124 if (gcCause == null) {
125 throw new NullPointerException("Null gcCause");
126 }
127 this.gcName = gcName;
128 this.gcAction = gcAction;
129 this.gcCause = gcCause;
130 this.gcInfo = gcInfo;
131 this.cdata = new GarbageCollectionNotifInfoCompositeData(this);
132 }
133
134 GarbageCollectionNotificationInfo(CompositeData cd) {
135 GarbageCollectionNotifInfoCompositeData.validateCompositeData(cd);
136
137 this.gcName = GarbageCollectionNotifInfoCompositeData.getGcName(cd);
138 this.gcAction = GarbageCollectionNotifInfoCompositeData.getGcAction(cd);
139 this.gcCause = GarbageCollectionNotifInfoCompositeData.getGcCause(cd);
140 this.gcInfo = GarbageCollectionNotifInfoCompositeData.getGcInfo(cd);
141 this.cdata = cd;
142 }
143
144 /**
145 * Returns the name of the garbage collector used to perform the collection
146 *
147 * @return the name of the garbage collector used to perform the collection
148 */
149 public String getGcName() {
150 return gcName;
151 }
152
153 /**
154 * Returns the action of the performed by the garbage collector
155 *
156 * @return the the action of the performed by the garbage collector
157 */
158 public String getGcAction() {
159 return gcAction;
160 }
161
162 /**
163 * Returns the cause the garbage collection
164 *
165 * @return the the cause the garbage collection
166 */
167 public String getGcCause() {
168 return gcCause;
169 }
170
171 /**
172 * Returns the GC information related to the last garbage collection
173 *
174 * @return the GC information related to the
175 * last garbage collection
176 */
177 public GcInfo getGcInfo() {
178 return gcInfo;
179 }
180
181 /**
182 * Returns a {@code GarbageCollectionNotificationInfo} object represented by the
183 * given {@code CompositeData}.
184 * The given {@code CompositeData} must contain
185 * the following attributes:
186 * <blockquote>
187 * <table border>
188 * <tr>
189 * <th align=left>Attribute Name</th>
190 * <th align=left>Type</th>
191 * </tr>
192 * <tr>
193 * <td>gcName</td>
194 * <td>{@code java.lang.String}</td>
195 * </tr>
196 * <tr>
197 * <td>gcAction</td>
198 * <td>{@code java.lang.String}</td>
199 * </tr>
200 * <tr>
201 * <td>gcCause</td>
202 * <td>{@code java.lang.String}</td>
203 * </tr>
204 * <tr>
205 * <td>gcInfo</td>
206 * <td>{@code javax.management.openmbean.CompositeData}</td>
207 * </tr>
208 * </table>
209 * </blockquote>
210 *
211 * @param cd {@code CompositeData} representing a
212 * {@code GarbageCollectionNotificationInfo}
213 *
214 * @throws IllegalArgumentException if {@code cd} does not
215 * represent a {@code GarbaageCollectionNotificationInfo} object.
216 *
217 * @return a {@code GarbageCollectionNotificationInfo} object represented
218 * by {@code cd} if {@code cd} is not {@code null};
219 * {@code null} otherwise.
220 */
221 public static GarbageCollectionNotificationInfo from(CompositeData cd) {
222 if (cd == null) {
223 return null;
224 }
225
226 if (cd instanceof GarbageCollectionNotifInfoCompositeData) {
227 return ((GarbageCollectionNotifInfoCompositeData) cd).getGarbageCollectionNotifInfo();
228 } else {
229 return new GarbageCollectionNotificationInfo(cd);
230 }
231 }
232
233 public CompositeData toCompositeData(CompositeType ct) {
234 return cdata;
235 }
236
237}