--- old/test/gc/metaspace/ClassMetaspaceSizeInJmapHeap.java 2013-03-13 22:44:14.607571762 +0100 +++ new/test/gc/metaspace/ClassMetaspaceSizeInJmapHeap.java 2013-03-13 22:44:14.543571763 +0100 @@ -30,6 +30,7 @@ */ import com.oracle.java.testlibrary.*; +import com.oracle.java.testlibrary.gc.*; import java.nio.file.*; import java.io.File; import java.nio.charset.Charset; @@ -39,8 +40,10 @@ public static void main(String[] args) throws Exception { String pid = Integer.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - pb.command(JDKToolFinder.getJDKTool("jmap"), "-heap", pid); + JmapLauncher jmap = new JmapLauncher(); + jmap.setJmapArguments("-heap", pid); + + ProcessBuilder pb = new ProcessBuilder(jmap.getCommand()); File out = new File("ClassMetaspaceSizeInJmapHeap.stdout.txt"); pb.redirectOutput(out); --- /dev/null 2013-03-13 20:37:46.581069912 +0100 +++ new/test/testlibrary/com/oracle/java/testlibrary/gc/JmapLauncher.java 2013-03-13 22:44:14.911571759 +0100 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.oracle.java.testlibrary.gc; + +import java.util.List; +import java.util.ArrayList; +import com.oracle.java.testlibrary.*; + +/** + * A helper class for creating a command that starts a {@code jmap} process. + * + * The JmapLauncher can in particular be combined with a + * java.lang.ProcessBuilder to easily start a jmap process. For example, the + * following code run {@code jmap -heap} against a process with GC logging + * turned on for the {@code jmap} process: + * + *
+ * {@code + * JmapLauncher jmap = new JmapLauncher("-XX:+PrintGC"); + * jmap.setJmapArguments("-heap", pid); + * ProcessBuilder pb = new ProcessBuilder(jmap.getCommand()); + * Process p = pb.start(); + * } + *+ */ +public class JmapLauncher { + private final String executable; + private final List