aoqi@0: /* tschatzl@7893: * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: import java.io.PrintWriter; aoqi@0: import com.oracle.java.testlibrary.*; aoqi@0: aoqi@0: /* aoqi@0: * Test to verify GetObjectSize does not overflow on a 600M element int[] aoqi@0: * aoqi@0: * @test aoqi@0: * @bug 8027230 aoqi@0: * @library /testlibrary aoqi@0: * @build ClassFileInstaller com.oracle.java.testlibrary.* GetObjectSizeOverflowAgent aoqi@0: * @run main ClassFileInstaller GetObjectSizeOverflowAgent aoqi@0: * @run main GetObjectSizeOverflow aoqi@0: */ aoqi@0: public class GetObjectSizeOverflow { aoqi@0: public static void main(String[] args) throws Exception { aoqi@0: aoqi@0: if (!Platform.is64bit()) { aoqi@0: System.out.println("Test needs a 4GB heap and can only be run as a 64bit process, skipping."); aoqi@0: return; aoqi@0: } aoqi@0: aoqi@0: PrintWriter pw = new PrintWriter("MANIFEST.MF"); aoqi@0: pw.println("Premain-Class: GetObjectSizeOverflowAgent"); aoqi@0: pw.close(); aoqi@0: aoqi@0: ProcessBuilder pb = new ProcessBuilder(); aoqi@0: pb.command(new String[] { JDKToolFinder.getJDKTool("jar"), "cmf", "MANIFEST.MF", "agent.jar", "GetObjectSizeOverflowAgent.class"}); aoqi@0: pb.start().waitFor(); aoqi@0: aoqi@0: ProcessBuilder pt = ProcessTools.createJavaProcessBuilder(true, "-Xmx4000m", "-javaagent:agent.jar", "GetObjectSizeOverflowAgent"); aoqi@0: OutputAnalyzer output = new OutputAnalyzer(pt.start()); aoqi@0: aoqi@0: if (output.getStdout().contains("Could not reserve enough space") || output.getStderr().contains("java.lang.OutOfMemoryError")) { aoqi@0: System.out.println("stdout: " + output.getStdout()); aoqi@0: System.out.println("stderr: " + output.getStderr()); aoqi@0: System.out.println("Test could not reserve or allocate enough space, skipping"); aoqi@0: return; aoqi@0: } aoqi@0: aoqi@0: output.stdoutShouldContain("GetObjectSizeOverflow passed"); aoqi@0: } aoqi@0: }