jdk/test/java/lang/instrument/NMTHelper.java
changeset 30355 e37c7eba132f
parent 26193 09edb0e9f15a
child 40684 2e37c119dc2a
equal deleted inserted replaced
30354:ca83b4cae363 30355:e37c7eba132f
    25 import java.io.FileWriter;
    25 import java.io.FileWriter;
    26 import java.util.regex.Matcher;
    26 import java.util.regex.Matcher;
    27 import java.util.regex.Pattern;
    27 import java.util.regex.Pattern;
    28 import java.util.Arrays;
    28 import java.util.Arrays;
    29 import java.util.stream.Collectors;
    29 import java.util.stream.Collectors;
    30 import sun.management.ManagementFactoryHelper;
    30 import java.lang.management.ManagementFactory;
    31 import com.sun.management.DiagnosticCommandMBean;
    31 import javax.management.MalformedObjectNameException;
       
    32 import javax.management.ObjectName;
    32 
    33 
    33 public class NMTHelper
    34 public class NMTHelper
    34 {
    35 {
    35     public static void baseline() {
    36     public static void baseline() {
    36         executeDcmd("vmNativeMemory", "baseline");
    37         executeDcmd("vmNativeMemory", "baseline");
    51         }
    52         }
    52         throw new Exception("Could not find the Total line in the NMT output.");
    53         throw new Exception("Could not find the Total line in the NMT output.");
    53     }
    54     }
    54 
    55 
    55     private static String executeDcmd(String cmd, String ... args) {
    56     private static String executeDcmd(String cmd, String ... args) {
    56         DiagnosticCommandMBean dcmd = ManagementFactoryHelper.getDiagnosticCommandMBean();
    57         ObjectName oname = null;
       
    58         try {
       
    59             oname = ObjectName.getInstance("com.sun.management:type=DiagnosticCommand");
       
    60         } catch (MalformedObjectNameException mone) {
       
    61             throw new RuntimeException(mone);
       
    62         }
    57         Object[] dcmdArgs = {args};
    63         Object[] dcmdArgs = {args};
    58         String[] signature = {String[].class.getName()};
    64         String[] signature = {String[].class.getName()};
    59 
    65 
    60         String cmdString = cmd + " " +
    66         String cmdString = cmd + " " +
    61             Arrays.stream(args).collect(Collectors.joining(" "));
    67             Arrays.stream(args).collect(Collectors.joining(" "));
    62         File f = new File("dcmdoutput-" + cmd + "-" + System.currentTimeMillis() + ".txt");
    68         File f = new File("dcmdoutput-" + cmd + "-" + System.currentTimeMillis() + ".txt");
    63         System.out.println("Output from Dcmd '" + cmdString + "' is being written to file " + f);
    69         System.out.println("Output from Dcmd '" + cmdString + "' is being written to file " + f);
    64         try (FileWriter fw = new FileWriter(f)) {
    70         try (FileWriter fw = new FileWriter(f)) {
    65             fw.write("> " + cmdString + ":");
    71             fw.write("> " + cmdString + ":");
    66             String result = (String) dcmd.invoke(cmd, dcmdArgs, signature);
    72             String result = (String)ManagementFactory.getPlatformMBeanServer().
       
    73                     invoke(oname, cmd, dcmdArgs, signature);
    67             fw.write(result);
    74             fw.write(result);
    68             return result;
    75             return result;
    69         } catch(Exception ex) {
    76         } catch(Exception ex) {
    70             ex.printStackTrace();
    77             ex.printStackTrace();
    71         }
    78         }