27
27
import java .io .File ;
28
28
import java .io .FileInputStream ;
29
29
import java .io .FileOutputStream ;
30
+ import java .io .IOException ;
30
31
import java .io .InputStream ;
31
32
import java .io .OutputStream ;
32
33
import java .lang .management .MemoryUsage ;
@@ -94,6 +95,7 @@ final class MemoryModel {
94
95
private Jvm jvm ;
95
96
private ObjectName libgraalName ;
96
97
private MBeanServerConnection connection ;
98
+ private boolean isAlreadyRegistered ;
97
99
98
100
private int chartCache = -1 ;
99
101
@@ -311,13 +313,22 @@ public void run() {
311
313
}
312
314
}
313
315
316
+ private boolean isLibgraalRegistered () throws IOException {
317
+ if (!isAlreadyRegistered ) {
318
+ isAlreadyRegistered = connection .isRegistered (libgraalName );
319
+ }
320
+ return isAlreadyRegistered ;
321
+ }
322
+
314
323
private Object [] getAttributes (String ... names ) {
315
324
try {
316
- List <Attribute > attrs = connection .getAttributes (libgraalName , names ).asList ();
317
- Object [] values = new Object [attrs .size ()];
318
-
319
- for (int i = 0 ; i < values .length ; i ++) {
320
- values [i ] = attrs .get (i ).getValue ();
325
+ Object [] values = new Object [names .length ];
326
+ if (isLibgraalRegistered ()) {
327
+ List <Attribute > attrs = connection .getAttributes (libgraalName , names ).asList ();
328
+
329
+ for (int i = 0 ; i < values .length ; i ++) {
330
+ values [i ] = attrs .get (i ).getValue ();
331
+ }
321
332
}
322
333
return values ;
323
334
} catch (Exception ex ) {
@@ -342,13 +353,18 @@ private void updateValues(final long time, Object[] values) {
342
353
if (values != null ) {
343
354
CompositeData usageData = (CompositeData ) values [0 ];
344
355
CompositeData peakData = (CompositeData ) values [1 ];
356
+
357
+ timestamp = time ;
345
358
if (usageData != null && peakData != null ) {
346
359
MemoryUsage mem = MemoryUsage .from (usageData );
347
360
MemoryUsage peak = MemoryUsage .from (peakData );
348
361
heapUsed = mem .getUsed ();
349
362
heapCapacity = peak .getUsed ();
350
363
maxHeap = mem .getMax ();
351
- timestamp = time ;
364
+ } else {
365
+ heapUsed = 0 ;
366
+ heapCapacity = 0 ;
367
+ maxHeap = 0 ;
352
368
}
353
369
}
354
370
}
0 commit comments