Skip to content

Commit 20a085b

Browse files
committed
detect libgraal using UseJVMCINativeLibrary VM option; report zero usage until libgraal MX Bean is registred
1 parent 3e14357 commit 20a085b

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

visualvm/graalvm/src/org/graalvm/visualvm/graalvm/libgraal/MemoryModel.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.File;
2828
import java.io.FileInputStream;
2929
import java.io.FileOutputStream;
30+
import java.io.IOException;
3031
import java.io.InputStream;
3132
import java.io.OutputStream;
3233
import java.lang.management.MemoryUsage;
@@ -94,6 +95,7 @@ final class MemoryModel {
9495
private Jvm jvm;
9596
private ObjectName libgraalName;
9697
private MBeanServerConnection connection;
98+
private boolean isAlreadyRegistered;
9799

98100
private int chartCache = -1;
99101

@@ -311,13 +313,22 @@ public void run() {
311313
}
312314
}
313315

316+
private boolean isLibgraalRegistered() throws IOException {
317+
if (!isAlreadyRegistered) {
318+
isAlreadyRegistered = connection.isRegistered(libgraalName);
319+
}
320+
return isAlreadyRegistered;
321+
}
322+
314323
private Object[] getAttributes(String... names) {
315324
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+
}
321332
}
322333
return values;
323334
} catch (Exception ex) {
@@ -342,13 +353,18 @@ private void updateValues(final long time, Object[] values) {
342353
if (values != null) {
343354
CompositeData usageData = (CompositeData) values[0];
344355
CompositeData peakData = (CompositeData) values[1];
356+
357+
timestamp = time;
345358
if (usageData != null && peakData != null) {
346359
MemoryUsage mem = MemoryUsage.from(usageData);
347360
MemoryUsage peak = MemoryUsage.from(peakData);
348361
heapUsed = mem.getUsed();
349362
heapCapacity = peak.getUsed();
350363
maxHeap = mem.getMax();
351-
timestamp = time;
364+
} else {
365+
heapUsed = 0;
366+
heapCapacity = 0;
367+
maxHeap = 0;
352368
}
353369
}
354370
}

visualvm/graalvm/src/org/graalvm/visualvm/graalvm/libgraal/MemoryViewPluginProvider.java

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
*/
2525
package org.graalvm.visualvm.graalvm.libgraal;
2626

27-
import java.io.IOException;
2827
import java.lang.management.ManagementFactory;
29-
import javax.management.MBeanServerConnection;
3028
import javax.management.MalformedObjectNameException;
3129
import javax.management.ObjectName;
3230
import org.graalvm.visualvm.application.Application;
@@ -44,6 +42,7 @@
4442
*/
4543
public class MemoryViewPluginProvider extends DataSourceViewPluginProvider<Application> {
4644

45+
private static final String JVMCINativeLibraryFlag = "UseJVMCINativeLibrary"; // NOI18N
4746
static final String LIBGRAAL_HEAP = "Libgraal"; // NOI18N
4847

4948
private final ObjectName libgraalName;
@@ -90,21 +89,11 @@ private static ObjectName getLibgraalName() {
9089
}
9190
}
9291

93-
private static MBeanServerConnection getConnection(Application app) {
94-
JmxModel jmxModel = JmxModelFactory.getJmxModelFor(app);
95-
if (jmxModel != null && jmxModel.getConnectionState() == JmxModel.ConnectionState.CONNECTED) {
96-
return jmxModel.getMBeanServerConnection();
97-
}
98-
return null;
99-
}
100-
10192
private boolean isSupported(Application app) {
102-
try {
103-
MBeanServerConnection conn = getConnection(app);
104-
if (conn != null) {
105-
return conn.isRegistered(libgraalName);
106-
}
107-
} catch (IOException ex) {
93+
JmxModel jmxModel = JmxModelFactory.getJmxModelFor(app);
94+
if (jmxModel != null) {
95+
String val = jmxModel.getFlagValue(JVMCINativeLibraryFlag);
96+
return Boolean.valueOf(val);
10897
}
10998
return false;
11099
}

0 commit comments

Comments
 (0)