--- old/test/jdk/java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java 2019-10-21 18:49:31.684599700 +0100 +++ new/test/jdk/java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java 2019-10-21 18:49:30.324465400 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2019, 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 @@ -30,14 +30,19 @@ import java.awt.image.Raster; import java.awt.image.SampleModel; import java.awt.image.WritableRaster; +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.util.ArrayList; +import java.util.List; /* * @test - * @bug 8201433 + * @bug 8201433 8232634 * @summary This test may throw OOME or NPE from native code, * it should not crash * @requires os.maxMemory >= 2G - * @run main/othervm/timeout=300000 -Xms1000m -Xmx1000m ICMColorDataTest + * @run main/othervm/timeout=600 -Xms1000m -Xmx1000m -XX:+UseSerialGC ICMColorDataTest */ public class ICMColorDataTest { private static final int WIDTH = 90; @@ -50,9 +55,20 @@ private static final byte[] GREEN = { (byte) 255, 0 }; private static final byte[] BLUE = { (byte) 255, 0 }; + private static final int MAX_SIZE = 10; + + private static final ReferenceQueue refQueue = + new ReferenceQueue<>(); + private static final List> refList = + new ArrayList<>(MAX_SIZE); + public static void main(String[] args) { try { - for (long i = 0; i < 300_000; i++) { + for (long i = 0; i < 30_000; i++) { + if (refQueue.poll() != null) { + System.err.println("Garbage collector was invoked"); + break; + } makeImage(); } } catch (OutOfMemoryError | NullPointerException e) { @@ -81,5 +97,9 @@ Graphics g = bufImage.getGraphics(); g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); g.dispose(); + + if (refList.size() < MAX_SIZE) { + refList.add(new PhantomReference<>(bufImage, refQueue)); + } } }