Path: blob/master/test/hotspot/jtreg/gc/shenandoah/oom/TestAllocLargeObj.java
41153 views
/*1* Copyright (c) 2018, Red Hat, Inc. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324/**25* @test TestAllocLargeObj26* @summary Test allocation of small object to result OOM, but not to crash JVM27* @requires vm.gc.Shenandoah28* @library /test/lib29* @run driver TestAllocLargeObj30*/3132import jdk.test.lib.process.OutputAnalyzer;33import jdk.test.lib.process.ProcessTools;3435public class TestAllocLargeObj {3637static final int SIZE = 1 * 1024 * 1024;38static final int COUNT = 16;3940static volatile Object sink;4142public static void work() throws Exception {43Object[] root = new Object[COUNT];44sink = root;45for (int c = 0; c < COUNT; c++) {46root[c] = new Object[SIZE];47}48}4950public static void main(String[] args) throws Exception {51if (args.length > 0) {52work();53return;54}5556{57ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(58"-Xmx16m",59"-XX:+UnlockExperimentalVMOptions",60"-XX:+UseShenandoahGC",61TestAllocLargeObj.class.getName(),62"test");6364OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());65analyzer.shouldHaveExitValue(1);66analyzer.shouldContain("java.lang.OutOfMemoryError: Java heap space");67}6869{70ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(71"-Xmx1g",72"-XX:+UnlockExperimentalVMOptions",73"-XX:+UseShenandoahGC",74TestAllocLargeObj.class.getName(),75"test");7677OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());78analyzer.shouldHaveExitValue(0);79analyzer.shouldNotContain("java.lang.OutOfMemoryError: Java heap space");80}81}82}838485