annotate test/serviceability/dcmd/DcmdUtil.java @ 14304:a2866d45e99e

8027454: Do not traverse string table during G1 remark when treating them as strong roots during initial mark Summary: Do not try to unlink string table entries unconditionally during remark. This is without side effects as the preceding initial mark always uses the string table as strong roots. Needs to be fixed with class unloading during concurrent mark. Reviewed-by: brutisso, mgerdin
author tschatzl
date Mon, 20 Jan 2014 11:47:29 +0100
parents afa21611f918
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14246
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
1 /*
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
2 * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
4 *
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
7 * published by the Free Software Foundation.
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
8 *
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
13 * accompanied this code).
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
14 *
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
18 *
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
21 * questions.
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
22 */
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
23
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
24 import sun.management.ManagementFactoryHelper;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
25
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
26 import com.sun.management.DiagnosticCommandMBean;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
27
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
28 public class DcmdUtil
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
29 {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
30 public static String executeDcmd(String cmd, String ... args) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
31 DiagnosticCommandMBean dcmd = ManagementFactoryHelper.getDiagnosticCommandMBean();
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
32 Object[] dcmdArgs = {args};
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
33 String[] signature = {String[].class.getName()};
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
34
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
35 try {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
36 System.out.print("> " + cmd + " ");
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
37 for (String s : args) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
38 System.out.print(s + " ");
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
39 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
40 System.out.println(":");
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
41 String result = (String) dcmd.invoke(transform(cmd), dcmdArgs, signature);
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
42 System.out.println(result);
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
43 return result;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
44 } catch(Exception ex) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
45 ex.printStackTrace();
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
46 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
47 return null;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
48 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
49
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
50 private static String transform(String name) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
51 StringBuilder sb = new StringBuilder();
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
52 boolean toLower = true;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
53 boolean toUpper = false;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
54 for (int i = 0; i < name.length(); i++) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
55 char c = name.charAt(i);
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
56 if (c == '.' || c == '_') {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
57 toLower = false;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
58 toUpper = true;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
59 } else {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
60 if (toUpper) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
61 toUpper = false;
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
62 sb.append(Character.toUpperCase(c));
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
63 } else if(toLower) {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
64 sb.append(Character.toLowerCase(c));
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
65 } else {
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
66 sb.append(c);
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
67 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
68 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
69 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
70 return sb.toString();
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
71 }
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
72
afa21611f918 8031304: Add dcmd to print all loaded dynamic libraries.
farvidsson
parents:
diff changeset
73 }