< prev index next >

src/jdk.jcmd/share/classes/sun/tools/jmap/JMap.java

Print this page

        

@@ -167,10 +167,11 @@
     private static void histo(String pid, String options)
         throws AttachNotSupportedException, IOException,
                UnsupportedEncodingException {
         String liveopt = "-all";
         String filename = null;
+        String parallel = null;
         String subopts[] = options.split(",");
 
         for (int i = 0; i < subopts.length; i++) {
             String subopt = subopts[i];
             if (subopt.equals("") || subopt.equals("all")) {

@@ -178,21 +179,28 @@
             } else if (subopt.equals("live")) {
                 liveopt = "-live";
             } else if (subopt.startsWith("file=")) {
                 filename = parseFileName(subopt);
                 if (filename == null) {
-                    usage(1); // invalid options or no filename
+                    System.err.println("Fail: invalid option or no file name '" + subopt +"'");
+                    System.exit(1);
+                }
+            } else if (subopt.startsWith("parallel=")) {
+               parallel = subopt.substring("parallel=".length());
+               if (parallel == null) {
+                    System.err.println("Fail: no number provided in option: '" + subopt + "'");
+                    System.exit(1);
                 }
             } else {
-                usage(1);
+                System.err.println("Fail: invalid option: '" + subopt + "'");
+                System.exit(1);
             }
         }
-
         System.out.flush();
 
         // inspectHeap is not the same as jcmd GC.class_histogram
-        executeCommandForPid(pid, "inspectheap", liveopt, filename);
+        executeCommandForPid(pid, "inspectheap", liveopt, filename, parallel);
     }
 
     private static void dump(String pid, String options)
         throws AttachNotSupportedException, IOException,
                UnsupportedEncodingException {

@@ -209,11 +217,12 @@
                 filename = parseFileName(subopt);
             }
         }
 
         if (filename == null) {
-            usage(1);  // invalid options or no filename
+            System.err.println("Fail: invalid option or no file name");
+            System.exit(1);
         }
 
         // dumpHeap is not the same as jcmd GC.heap_dump
         executeCommandForPid(pid, "dumpheap", filename, liveopt);
     }

@@ -285,10 +294,14 @@
         System.err.println("");
         System.err.println("    histo-options:");
         System.err.println("      live         count only live objects");
         System.err.println("      all          count all objects in the heap (default if one of \"live\" or \"all\" is not specified)");
         System.err.println("      file=<file>  dump data to <file>");
+        System.err.println("      parallel=<number>  parallel threads number for heap iteration:");
+        System.err.println("                                  parallel=0 default behavior, use predefined number of threads");
+        System.err.println("                                  parallel=1 disable parallel heap iteration");
+        System.err.println("                                  parallel=<N> use N threads for parallel heap iteration");
         System.err.println("");
         System.err.println("    Example: jmap -histo:live,file=/tmp/histo.data <pid>");
         System.exit(exit);
     }
 }
< prev index next >